我试图实现一个类似于ObservableCollection
的专用集合来封装其中的一些机制,为此我让我的集合继承自Collection
并实现了相同的接口。
然而,我不知道如何实现整个集合更改逻辑,例如Collection<T>.Add
没有被重写(甚至没有标记为虚拟方法),那么如果使用该方法添加项,ObservableCollection
如何触发CollectionChanged
事件呢?
我试图实现一个类似于ObservableCollection
的专用集合来封装其中的一些机制,为此我让我的集合继承自Collection
并实现了相同的接口。
然而,我不知道如何实现整个集合更改逻辑,例如Collection<T>.Add
没有被重写(甚至没有标记为虚拟方法),那么如果使用该方法添加项,ObservableCollection
如何触发CollectionChanged
事件呢?
Collection<T>.Add
会调用InsertItem
虚拟方法(在检查集合不是只读之后)。ObservableCollection<T>
确实覆盖了这个方法,执行插入并引发相关的更改通知。protected override void InsertItem(int index, T item)
{
this.CheckReentrancy();
base.InsertItem(index, item);
this.OnPropertyChanged("Count");
this.OnPropertyChanged("Item[]");
this.OnCollectionChanged(NotifyCollectionChangedAction.Add, item, index);
}