2016-04-22 117 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)); 
     } 
    }