ObservableCollection <T> .Add如何工作?

H.B*_*.B. 7 c# wpf observablecollection inotifycollectionchanged

我试图实现一个专门的集合,其工作就像ObservableCollection封装了一些更多的机制,为此我也让我的集合继承Collection而且我也实现了相同的接口.

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

Ani*_*Ani 10

要回答您的具体问题,请Collection<T>.Add调用InsertItem虚方法(在检查集合不是只读之后).ObservableCollection<T>确实会覆盖此方法以执行插入引发相关的更改通知.

  • @Darin Dimitrov*"最好的.NET工具"**"将不得不破解它.永远不会为它支付35美元."*...你的价值观对我来说是完全莫名其妙. (10认同)

Aar*_*ver 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);
}
Run Code Online (Sandbox Code Playgroud)