我想知道该接口的现有消费者 - 我认为这将主要是绑定控件 - 利用移动和替换接口的事件,这些事件超出了仅通过添加和删除表达的能力。 / p>
特别是: 他们实际使用过,还是仅仅是一些历史文物?
答案 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对重置和移动事件做出反应