2015-08-08 76 views
1

GridView綁定不起作用。你能檢查我缺少的東西嗎? 爲了您的便利,我發佈了我的所有代碼。 這個測試代碼的目的是,如果我點擊添加按鈕,人物類將被添加到gridview。GridView綁定不起作用。我錯過了什麼?

低於

C#代碼...

public partial class MainWindow : Window 
{ 
    List<Person> persons; 
    public MainWindow() 
    { 
     InitializeComponent(); 
     persons = new List<Person>() { new Person() {Name="A", Age=20}, 
             new Person() {Name="B", Age=30}}; 

     lstView.ItemsSource = persons; 
    } 

    private void Add_Click(object sender, RoutedEventArgs e) 
    { 
     persons.Add(new Person { Name = tbName.Text, Age = Int32.Parse(tbAge.Text) }); 
    } 


} 

public class Person : INotifyPropertyChanged 
{ 
    private string name; 
    public string Name 
    { 
     get { return name; } 
     set 
     { 
      name = value; 
      OnPropertyChanged("Name"); 
     } 
    } 

    private int age; 
    public int Age 
    { 
     get { return age; } 
     set 
     { 
      age = value; 
      OnPropertyChanged("Age"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    void OnPropertyChanged(string name) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(name)); 
    } 
} 

和XAML代碼..

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Width="525" Height="150"> 

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="50"/> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="30"/> 
     <RowDefinition Height="30"/> 
     <RowDefinition Height="30"/> 
     <RowDefinition Height="30"/> 
    </Grid.RowDefinitions> 
    <TextBlock Grid.Column="0">Name</TextBlock> 
    <TextBox Grid.Column="1" x:Name="tbName"></TextBox> 
    <TextBlock Grid.Column="0" Grid.Row="1">Age</TextBlock> 
    <TextBox Grid.Column="1" Grid.Row="1" x:Name="tbAge"></TextBox> 
    <Button Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2" Click="Add_Click"> Add </Button> 
    <ListView Grid.Column="2" Grid.RowSpan="4" x:Name="lstView"> 
     <ListView.View> 
      <GridView> 
       <GridView.Columns> 
        <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/> 
        <GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}"/> 
       </GridView.Columns> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 

回答

1

INotifyPropertyChanged適用於對象上的更改(在您的情況下爲每個Person實例)。

您需要一個ObservableCollection(它實現INotifyCollectionChanged)來偵聽集合中的更改(在您的案例中收集集合中的新的和刪除的Person實例)。

表示動態數據收集,當 項目被添加,刪除或整個列表刷新時提供通知。

更多信息here

+0

謝謝。我已經知道了。但是如果我使用INotifyPropertyChanged讓人觀察,它應該可以工作。我錯了嗎 ? – myoldgrandpa

+0

INotifyPropertyChanged將通知您有關特定人員的更改。當有人將新人添加到收藏中時,您真正想要的是要得到通知。 –

1

你需要一個ObservableCollection不是List

ObservableCollection<Person> persons; 
+0

謝謝您commet。我已經嘗試過它,它的工作原理。但現在我正在深入研究綁定,並希望在沒有ObservableCollection的情況下使其工作。我不能使用「INotifyPropertyChanged Person類」工作嗎? – myoldgrandpa

+0

沒有它就無法工作 – thumbmunkeys

相關問題