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

时间:2011-06-07 13:18:48

标签: c# silverlight silverlight-4.0

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

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

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

有人知道DataForm何时决定更改集合,而不是简单地编辑对象?造成这种差异的原因是什么?

更新

These articles让我想到了滤镜,事实证明,对PagedCollectionView应用了过滤器会带来不同。使用过滤器:用户的编辑操作会导致从集合中删除/添加,不带过滤器:不会更改集合,只需编辑对象。

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

1 个答案:

答案 0 :(得分:4)

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

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