ObservableCollection提出“Item []”的PropertyChange的目的是什么?

时间:2009-04-07 23:01:04

标签: c# wpf

ObservableCollection提出“Item []”的PropertyChange的目的是什么?

如果我有一个实现INotifyCollectionChanged的类,这是我应该做的吗?

WPF控件是否以某种方式使用了“Item []”的PropertyChange?

2 个答案:

答案 0 :(得分:4)

ObservableCollection同时实现了INotifyCollectionChangedINotifyPropertyChanged

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[]")); } - 类似的集合类,这似乎是实现ObservableCollectionINotifyCollectionChanged的正确方法。

答案 1 :(得分:0)

是WPF和Silverlight控件使用PropertyChange事件来更新UI控件。这允许像ListView或DataGrid这样的东西自动更新以响应它们的绑定ObservableCollection - 或实现INotifyCollectionChanged的其他集合 - 更改。

编辑:就实现而言,您通常不需要实现自己的集合,因此不需要担心INotifyCollectionChanged。对于将在ObservableCollection中使用的类,您需要实现INotifyPropertyChanged。这允许您的对象在更新时触发PropertyChanged事件,这将允许您的UI控件自动显示更改。