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

はしかし、これは初回のみイベントが発生すると、いない後発事象に更新されます。私はlistViewUsers、someEventHandlerに

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

を移動した場合にのみ、最新のアップデートではなく、前のレコードが表示されます。アイテムにどのように追加するのですか?

+0

はこのコードですか?あなたが持っている? –

答えて

3

xamlのすべてをViewModel経由でバインドすることをお勧めしますが、問題を解決するには、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

ObservableCollectionを使用してみてください、ObservableCollectionはアイテムが追加、削除、またはコレクション全体が更新されたとき取得したときに通知を提供し、一般的なダイナミックなデータの収集です。

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)); 
     } 
    } 
関連する問題