ObservableCollection(T).CollectionChanged事件

3
SelectedObjects.CollectionChanged += (s, e) =>
{
    Console.WriteLine(e.NewItems.Count);//prints out 1 if a new item is added
};

有一件我不太确定的事情是为什么e.OldItems和e.NewItems是集合?

如果我每秒添加多个项目,事件会对每个项目进行触发,输出始终为1,这意味着它被多次触发,但是否有一种延迟事件触发的方法,例如在改变后5秒钟后,以便我可以在e.OldItems或e.NewItems中获得这五秒钟内的每个更改?


1
需要注意的一点是,CollectionChanged及其事件参数并不特定于任何预定义类型,如ObservableCollection<T>。它由INotifyCollectionChanged定义,而绑定会寻找该接口。因此,如果需要或想要一个仅偶尔更新并聚合多个后续更改的集合,可以自己编写,并且INotifyCollectionChanged接口为此提供了完全支持。 - O. R. Mapper
1个回答

5
不。可观察的集合的意义在于在修改时引发事件。虽然在您的用例中,希望在设置的一定时间后通知,但这不是每个用例,会使类过于复杂。
您可以将可观察的集合包装到您创建的自定义类中(例如DelayedObservableCollection<T>),并结合计时器,在添加/修改项时引发自己的事件,然后在指定时间后没有添加/修改任何项,或者添加/修改了超过“x”个项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接