在ObservableCollection上实现INotifyPropertyChanged的目的是什么?

wpf*_*wpf 8 wpf observablecollection inotifypropertychanged

ObservableCollection实现INotifyCollectionChangedINotifyPropertyChanged.

  • 我了解通过集合的事件 可以向消费者通知添加,删除(+清除)和项目替换CollectionChanged,并且如果项目PropertyChanged实现自己,则可以使用项目事件 监视现有项目中的更新INotifyPropertyChanged.

  • 我从别人那里读到你不能在集合的事件上注册, PropertyChanged因为它是readonly.

那么它的目的是什么,我们可以利用它做什么

这里和那里的评论似乎让讨论变得混乱,暗示着ObservableCollection实现两个接口的神奇之处在于允许同时收集集合和项目内容更改,而这是不正确的(许多示例都忽略了这一点)绑定到一个列表框,在项目内容更改后神奇地更新,建议集合通知列表框).

实际上,这个系列的唯一优势似乎是实现INotifyCollectionChanged.ObservableCollection与其他集合相比,处理项目属性更改似乎并不容易:只有当项目实现时INotifyPropertyChanged,它们可能不会执行,并且如果用户设法独立于集合挂钩此事件,则可能.

它是否正确?

Tho*_*que 9

如果您ObservableCollection<T>使用Reflector 查看源代码,您可以看到此事件是针对两个属性引发的:

this.OnPropertyChanged("Count");
this.OnPropertyChanged("Item[]");
Run Code Online (Sandbox Code Playgroud)

请注意,显式ObservableCollection<T>实现INotifyPropertyChanged,因此您PropertyChanged只能通过INotifyPropertyChanged变量访问事件:

INotifyPropertyChanged inpc = myObservableCollection;
inpc.PropertyChanged += myEventHandler;
Run Code Online (Sandbox Code Playgroud)

  • 目的是通知订阅者该集合已更改.在这方面,它与CollectionChanged事件具有相同的目的,但INotifyPropertyChanged比INotifyCollectionChanged得到更广泛的支持. (2认同)

Gro*_*kys 1

只是猜测:这样可以通知集合的 Count 属性发生更改吗?