INotifyPropertyChanging
这个是INotifyPropertyChanged的孪生兄弟,会在属性值发生变更之前触发。其目的是让消费者缓存先前的值。LINQ和Entity Framework等ORM框架可能会利用这些信息进行跟踪。
ISupportInitialize/ISupportInitializeNotification
ISupportInitialize的目的是临时禁用属性/集合变更通知、错误验证等。要使用它,请在进行属性变更之前先调用BeginInit。
当调用EndInit时,可以发送一个“everything changed”变更通知。这个是通过使用一个包含null或空属性名称的PropertyChangedEventArgs对象来完成的。
如果希望在初始化完成时收到通知,可以给ISupportInitializeNotification接口添加Initialized事件和IsInitialized属性。
集合变更通知
正如我们需要知道单个属性的变更一样,我们也需要知道整个集合发生的变更。我们可以使用INotifyCollectionChanged接口来解决这个问题。
可惜的是,INotifyCollectionChanged远不如它的名字所暗示的那么强大。从理论上讲,CollectionChanged相关事件可以使用单个事件来告诉我们何时已将整组对象添加到集合中或从集合中删除。但实际上,因为WPF中存在的设计缺陷导致无法实现这样的功能。
INotifyCollectionChanged最著名的实现是ObservableCollection<T>。这个类旨在为每个添加或删除的项目触发一个单独的CollectionChanged事件。在设计WPF时,它假设我们总是会使用ObservableCollection<T>,因此WPF不支持NotifyCollectionChangedEventArgs.NewItems具有多个项目的情况。










