2009-04-07 6 views

答えて

4

ObservableCollectionは、INotifyCollectionChangedINotifyPropertyChangedの両方を実装します。

INotifyPropertyChangedObservableCollectionのプロパティは、その要素("Count")の数またはコレクションのインデクサーを介してアクセス可能要素("Item[]")のように、変更されたことを示すために使用されます。さらに、ObservableCollectionはどの要素が正確にどのように変更されたかを示すINotifyCollectionChangedを実装しています。

Mono implementation of ObservableCollectionをご覧になり、ObservableCollectionの正確な内容を確認してください。例えば、ここにInsertItem方法です:あなたがあなた自身のObservableCollection様のコレクションクラスを実装する場合

protected override void InsertItem (int index, T item) 
{ 
    CheckReentrancy(); 

    base.InsertItem (index, item); 

    OnCollectionChanged (new NotifyCollectionChangedEventArgs (
     NotifyCollectionChangedAction.Add, item, index)); 
    OnPropertyChanged (new PropertyChangedEventArgs ("Count")); 
    OnPropertyChanged (new PropertyChangedEventArgs ("Item[]")); 
} 

が、それはINotifyCollectionChangedINotifyPropertyChangedの両方を実装するための適切な方法と思われます。

0

はいWPFおよびSilverlightコントロールは、PropertyChangeイベントを使用してUIコントロールを更新します。これにより、ListViewまたはDataGridのようなものが、バインドされたObservableCollectionまたはINotifyCollectionChangedを実装する他のコレクションの変更に応じて自動的に更新されます。

編集:実装に関しては、一般的に独自のコレクションを実装する必要はないので、INotifyCollectionChangedについて心配する必要はありません。 ObservableCollectionで使用されるクラスに対しては、INotifyPropertyChangedを実装する必要があります。これにより、PropertyChangedイベントが更新されたときにオブジェクトが自動的に変更を表示できるようになります。

+0

私は混乱しています。あなたは、WPFが 'Item []' 'のPropertyChangeを使用していると言っていますが、' CollectionChanged 'を実装する必要があります。 – jyoung

関連する問題