INotifyCollectionChanged的哪些实现实际使用移动和替换?

时间:2016-06-21 06:57:40

标签: .net xaml mvvm

我想知道该接口的现有消费者 - 我认为这将主要是绑定控件 - 利用移动和替换接口的事件,这些事件超出了仅通过添加和删除表达的能力。 / p>

特别是: 他们实际使用过,还是仅仅是一些历史文物?

2 个答案:

答案 0 :(得分:0)

当您致电ObservableCollection<T>.Move(int, int)时,您将获得移动操作。

更换项目时,您可能会采取相同的行为。但是Replace上没有ObservableCollection方法。您必须使用index accessor instead.

这些操作类型应始终由INotifyCollectionChanged个消费者处理。它们可作为暗示以防止额外操作。

考虑一下您是否拥有一个昂贵的集合图形表示,然后调用Remove后跟Insert。集合缩小一个元素,然后立即增长一个元素。这可能会导致在删除索引后重新绘制所有元素。替换和移动让消费者知道集合的大小没有改变。

答案 1 :(得分:0)

肯定不是和历史神器 - 它在那里为你所以你可以调用Move,resp替换和监听器可以对它做出反应。没有它,无论内置控件是否使用它,接口都将是不完整的。

不确定ItemsControl如何处理CollectionChanged事件,但我想有一些移动和替换事件的逻辑。

毕竟,WPF是开源的,为什么你不在这里查看:http://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Data/CollectionView.cs,4270b8e1bdd07308

如您所见,ItemsControl使用的CollectionView对重置和移动事件做出反应