2016-04-22 120 views
2

我刚开始学习WPF和C#。我有一个全球名单,我想附加一个事件。追加到全局列表

代码:

public partial class MainWindow : Window 
{ 
    public List<User> items = new List<User>(); 

    someEventHandler 
      { 
       items.Add(new User() { Name = "John", Age = 42 }); 
       listViewUsers.ItemsSource = items; 
      } 
} 

然而,这仅仅是更新了第一次的事件触发,而不是随后发生的事件。如果我将

public List<User> items = new List<User>(); 

给someEventHandler,listViewUsers将只显示最新的更新而不是以前的记录。我如何附加到项目?

+0

是这个唯一的编码?你有? –

回答

3

虽然我宁愿通过ViewModel绑定xaml中的所有内容,但要解决您的问题,您应该使用ObservableCollection,如下所示。如果项目在集合添加它会自动更新列表视图:

public partial class MainWindow : Window 
    { 
     public ObservableCollection<User> items = new ObservableCollection<User>(); 

     public MainWindow() 
     { 
      InitializeComponent(); 
      listViewUsers.ItemsSource = items; 

     } 

     someEventHandler 
      { 
       items.Add(new User() { Name = "John", Age = 42 }); 

      } 
} 
+0

非常感谢! – user3918985

1

尝试使用ObservableCollectionObservableCollection是一个通用的动态数据采集,提供通知,当项目将添加,删除,或当整个集合被刷新。

public partial class MainWindow : Window 
{ 
    public ObservableCollection<User> items = new ObservableCollection<User>(); 

    someEventHandler 
    { 
     items.Add(new User() { Name = "John", Age = 42 }); 

    } 
} 

另一种选择是实施INotifyPropertyChanged明确和通知更改。

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    private List<User> items; 
    public List<User> Items 
    { 
     get {return items; } 
     set {items=value; onPropertyChanged(this, "Items") }; 
    } 

    someEventHandler 
    { 
     items.Add(new User() { Name = "John", Age = 42 }); 
     onPropertyChanged(this, "Items") 
    } 



    // Declare the PropertyChanged event 
    public event PropertyChangedEventHandler PropertyChanged; 

    // OnPropertyChanged will raise the PropertyChanged event passing the 
    // source property that is being updated. 
    private void onPropertyChanged(object sender, string propertyName) 
    { 
     if (this.PropertyChanged != null) 
     { 
      PropertyChanged(sender, new PropertyChangedEventArgs(propertyName)); 
     } 
    }