如何将Filter应用于PagedCollectionView但阻止CollectionChanged事件在编辑时触发?

我有一个Silverlight应用程序,其中DataForm绑定在包含实现IEditableObject对象的PagedCollectionView 。 每当用户使用DataForm编辑对象时, CollectionChanged上的CollectionChanged事件将触发两次,首先是“ 删除”操作,然后是“ 添加”操作。

这不是我想要的。 我只想编辑集合中的对象而不触发CollectionChanged事件。

当我尝试在一个简单的测试应用程序中重现此问题时,它的行为与我想要的一样(即不触发事件),我无法弄清楚导致我的主应用程序和测试应用程序之间的行为差​​异的原因。

有谁知道DataForm何时决定更改集合,而不是简单地编辑对象? 是什么导致这种差异?

更新

这些 文章让我想到了filter,事实certificate, 将一个filter应用于 PagedCollectionView会产生不同。 使用filter:用户的编辑操作会导致从集合中删除/添加,不带filter:没有集合更改,只需编辑对象。

所以现在的问题是:为什么filter会导致删除/添加行为(即使filter只是’返回true’,即允许集合中的所有条目)以及如何防止这种情况?

看起来我终于找到了答案。 解决方案是不监听PagedCollectionView的CollectionChanged事件,而是监听 PagedCollectionView 的CollectionChanged事件 。 在我的例子中,这是一个ObservableCollection,所以它实际上一个CollectionChanged事件。

为了让我明白这一点,我需要意识到PagedCollectionView应该被认为是一个环绕集合的视图 ,而不仅仅是我可以使用的另一种类型的集合。 以这种方式看待它,很明显你想要在底层集合中寻找变化,而不是在视图中。 一旦你弄明白了,这一切都非常明显:-)