我试图实现一个像ObservableCollection
那样工作的专门集合来封装更多的机制,为此我还让我的集合继承自Collection
,我也实现了相同的接口。
我只是不知道如何实际实现整个集合 - 更改逻辑,例如Collection<T>.Add
没有被覆盖(它甚至没有被标记为虚拟),那么{{1}如何如果使用该方法添加项目,则触发ObservableCollection
事件?
答案 0 :(得分:10)
要回答您的具体问题,Collection<T>.Add
会调用InsertItem
虚拟方法(在检查集合不是只读后)。 ObservableCollection<T>
确实会覆盖此方法以执行插入和引发相关更改通知。
答案 1 :(得分:8)
它通过调用被覆盖的InsertItem
来实现,并且可以在反编译时看到
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);
}
答案 2 :(得分:0)
请记住,关键不在于覆盖基本的Collection方法,而在于您将实现ICollection接口。坦率地说,我建议改为创建一个在构造函数中使用ICollection的适配器类,而不是从Collection类继承,您的方法将委托给内部集合并引发相应的事件。