は、その内容変化加入者に通知することができる特殊なコレクションです。
2つがどのように関連しているのだろうと思っています(両方ともあなたの例のセッターに関係しているため)。今物事が変更されていることを知っているであろうINotifyCollectionChanged.CollectionChanged
イベントへ
var model = new MyViewModel(); // assume it's the class with Payments inside
model.Payments.Add(new PaymentViewModel());
加入者と、彼らはそれに応じて更新する必要があります:
は、このコードを考えてみましょう。
しかし、今これを見て:私たちは、その後、コレクションに別の1ためスワップコレクション全体を項目を追加した後
var model = new MyViewModel(); // assume it's the class with Payments inside
model.Payments.Add(new PaymentViewModel()); // OK, we know what this does
model.Payments = new ObservableCollection<PaymentViewModel>();
。 ItemsControl
がこのコレクションにバインドされている場合は、それ自体が更新され、model.Payments
が空になるという事実を反映します。しかし、どうすればそれができますか?
CollectionChanged
元のコレクション(最初のアイテムを受け取った後)が変更されていないため、役に立たないでしょう。私たちはそれを破棄し、別の場所に設置しました。スイッチが起こったことを知っている唯一の人は、Payments
プロパティセッターです。したがって、セッターはINotifyPropertyChanged
を利用して、コレクションが別のコレクションに置き換えられたことをサブスクライバに伝えます。もちろん、そのステータスを更新する必要があります。
結論:結合対象は、彼らが同様にそのを購読するINotifyCollectionChanged
を実装している場合、すべてのデータバインドされたコントロールがそのDataContext
、とのINotifyPropertyChanged
に耳を傾けるためデータは、WPFで自動的に作品を結合。バインディングターゲットが変更された場合は、INotifyPropertyChanged
によって通知され、古いターゲットのINotifyCollectionChanged
からの登録を解除し、新しいターゲットに登録します。
出典
2012-04-20 13:19:10
Jon
私もあなたの答えを理解しています。あなたも良い答えを与えます。ありがとうございます。 – pratikjgandhi