ObservableCollection <t> .Add如何工作?</t>

时间:2011-02-16 22:07:53

标签: c# wpf observablecollection inotifycollectionchanged

我试图实现一个像ObservableCollection那样工作的专门集合来封装更多的机制,为此我还让我的集合继承自Collection,我也实现了相同的接口。

我只是不知道如何实际实现整个集合 - 更改逻辑,例如Collection<T>.Add没有被覆盖(它甚至没有被标记为虚拟),那么{{1}如何如果使用该方法添加项目,则触发ObservableCollection事件?

3 个答案:

答案 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类继承,您的方法将委托给内部集合并引发相应的事件。

相关问题