9

ObservableCollection<T>メモの MSDN リファレンス ページ:

「コレクション内のオブジェクトは、バインディング ソースの概要で説明されている要件を満たす必要があります。特に、OneWayまたはTwoWayを使用している場合(たとえば、ソース プロパティが動的に変更されたときに UI を更新する必要がある場合)、適切なINotifyPropertyChangedインターフェイスなどのプロパティ変更通知メカニズム。」

ObservableCollection<T>は既に実装されているのに、再度実装するINotifyPropertyChanged必要があるのはなぜですか?INotifyPropertyChangedT

4

2 に答える 2

10

監視可能なコレクションをテーブルのデータ ソースと考えてください。コレクションの各オブジェクトは 1 つの行を占め、複数の列にわたってテーブルに表示されます。

ビュー (つまり、テーブル) は、オブジェクトのプロパティの変更に応じて各セルをいつ変更するかを知る必要がありますが、コレクションへのオブジェクトの追加とコレクションからのオブジェクトの削除にも応じます。

オブジェクトが挿入、削除、移動されると、オブザーバに通知します。ただし、個々のオブジェクトで何が起こっているかについての知識が不足しているため、テーブルの列を処理する際には役に立ちません。

これがオブジェクトの出番です。オブジェクトを実装INotifyPropertyChangedすることで、テーブルが列のデータを管理できるようになります。

于 2012-04-24T03:35:21.400 に答える
3

INotifyPropertyChangedプロパティが変更されているオブジェクトによって発生する必要があります。ObservableCollection含まれているオブジェクトの変更を単純に検出して、それらをあなたに代わって渡すことはできません。

コレクションが実装する理由はINotifyPropertyChanged特に有用ではありません。Countコレクションにアイテムが追加/削除されると変更されるコレクションのプロパティの変更イベントのみが発生すると思われます。

アイテムの追加/削除のみに関心がある場合は、このインターフェイスをクラスに実装する必要はないかもしれません。ただし、UI がオブジェクトのプロパティにバインドしている場合、UI が反応するようにするには、それを実装する必要があります。

于 2012-04-24T03:35:12.500 に答える