ObservableCollection引发PropertyChange为“Item []”的目的是什么?ObservableCollection引发“Item []”的PropertyChange的目的是什么?
这是我应该做的事情,如果我有一个类实现INotifyCollectionChanged?
WPF控件是否以某种方式使用此ItemChange的“Item []”?
ObservableCollection引发PropertyChange为“Item []”的目的是什么?ObservableCollection引发“Item []”的PropertyChange的目的是什么?
这是我应该做的事情,如果我有一个类实现INotifyCollectionChanged?
WPF控件是否以某种方式使用此ItemChange的“Item []”?
ObservableCollection
实施INotifyCollectionChanged
和INotifyPropertyChanged
。
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
般的集合类,它似乎同时实现INotifyCollectionChanged
和INotifyPropertyChanged
的正确方法。
是的WPF和Silverlight控件使用PropertyChange事件来更新UI控件。这允许像ListView或DataGrid的东西自动更新,以响应绑定的ObservableCollection或实现INotifyCollectionChanged的其他集合的更改。
编辑:就实现而言,通常不需要实现自己的集合,因此不需要关于INotifyCollectionChanged的问题。对于将在ObservableCollection中使用的类,您需要实现INotifyPropertyChanged。这允许您的对象在更新时触发PropertyChanged事件,这将允许您的UI控件自动显示更改。
我很困惑。你说WPF使用'PropertyChange'Item []“',但我应该实现'CollectionChanged'。 – jyoung 2009-04-07 23:35:32