2009-04-07 68 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