ObservableCollection提出“Item []”的PropertyChange的目的是什么?
如果我有一个实现INotifyCollectionChanged的类,这是我应该做的吗?
WPF控件是否以某种方式使用了“Item []”的PropertyChange?
答案 0 :(得分:4)
ObservableCollection
同时实现了INotifyCollectionChanged
和INotifyPropertyChanged
。
INotifyPropertyChanged
用于表示ObservableCollection
的属性已更改,例如其元素的数量("Count"
)或通过集合索引器可访问的元素({{1} }})。此外,"Item[]"
实现ObservableCollection
以指示哪个元素已完全更改以及如何更改。
查看Mono implementation of ObservableCollection
,了解INotifyCollectionChanged
的确切内容。例如,这是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
的正确方法。
答案 1 :(得分:0)
是WPF和Silverlight控件使用PropertyChange事件来更新UI控件。这允许像ListView或DataGrid这样的东西自动更新以响应它们的绑定ObservableCollection - 或实现INotifyCollectionChanged的其他集合 - 更改。
编辑:就实现而言,您通常不需要实现自己的集合,因此不需要担心INotifyCollectionChanged。对于将在ObservableCollection中使用的类,您需要实现INotifyPropertyChanged。这允许您的对象在更新时触发PropertyChanged事件,这将允许您的UI控件自动显示更改。