2009-04-07 20 views

回答

4

ObservableCollection實施INotifyCollectionChangedINotifyPropertyChanged

INotifyPropertyChanged用於指示ObservableCollection的屬性發生變化時,如它的元素("Count"),或通過該集合的索引("Item[]")可訪問的元素的數量。另外,ObservableCollection實現INotifyCollectionChanged以指示哪個元素已經完全改變以及如何改變。

看看Mono implementation of ObservableCollection,看看ObservableCollection究竟做了什麼。例如,這裏是InsertItem方法:

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[]")); 
} 

如果你想實現自己的ObservableCollection般的集合類,它似乎同時實現INotifyCollectionChangedINotifyPropertyChanged的正確方法。

0

是的WPF和Silverlight控件使用PropertyChange事件來更新UI控件。這允許像ListView或DataGrid的東西自動更新,以響應綁定的ObservableCollection或實現INotifyCollectionChanged的其他集合的更改。

編輯:就實現而言,通常不需要實現自己的集合,因此不需要關於INotifyCollectionChanged的問題。對於將在ObservableCollection中使用的類,您需要實現INotifyPropertyChanged。這允許您的對象在更新時觸發PropertyChanged事件,這將允許您的UI控件自動顯示更改。

+0

我很困惑。你說WPF使用'PropertyChange'Item []「',但我應該實現'CollectionChanged'。 – jyoung 2009-04-07 23:35:32

相關問題