为什么在可观察的集合事件参数中有更改列表?

Why there is list of changes in observable collection event args?

我想了解为什么有两个 list 属性 NewItemsOldItems 而您一次只能添加或删除一个项目?

private void InternalCollectionChanged(object sender, NotifyCollectionChangedEventArgs args)
{
    var changes = args.NewItems; // why this is a list?
}

我查看了 ObservableCollection 的可用方法,我一次只能添加或删除一个项目。

如果我一次只能添加或删除一个项目,为什么要在事件参数中列出更改列表而不是单个添加或删除更改?

ObservableCollection<T>INotifyCollectionChanged 接口的实现,实际上它不支持添加或删除多个项目。但是您可以创建自己的集合 class 实现 INotifyCollectionChanged(和 INotifyPropertyChanged),这将支持添加或删除多个项目。

作为@Pavel 回答的附加信息,ObservableCollection<T> 不支持开箱即用,但您可以创建支持此功能的 ObservableCollection<T> 的自定义派生类型。一个很好的例子是 ObservableRangeCollection from James Montemagno or a even more optimized version in this Stack Overflow answer.