11

在某些情况下,由于大量 INotifyChangedProperties 事件,您有许多 UI 更新。在这种情况下,您可能只想在所有属性都像批处理一样设置时向 UI 发出一次更改信号。

我发现这篇很棒的文章解释了如何推迟 ViewCollection 的刷新:

http://marlongrech.wordpress.com/2008/11/22/icollectionview-explained/

但是,当视图被延迟并且我尝试向集合中添加一些东西时,我得到了一个异常。我不明白为什么不允许这样做。这就是它的全部意义。

InvalidoperationException: 在延迟刷新时无法更改或检查 CollectionView 的内容或当前位置。

有谁知道如何解决这个问题?非常感谢,

4

2 回答 2

19

我认为您误解或歪曲了 MSDN 关于该主题的帮助。他们说您不必修改基础集合来排序或过滤。他们并不是说您不能修改基础集合。OP有一个非常有效的观点。我们有一个已为用户排序和过滤的大型集合,它显示在列表框中。当用户选择这些记录的范围并想要删除它们时,我们被迫进入 ListCollectionView 刷新每个已删除项目的视图的情况。

我认为OP的问题非常有效。性能非常糟糕,因为我们对大量数据有多个过滤器。DeferRefresh 对 ListCollectionView 之类的类有真正的用途,但在您最需要它的时候却莫名其妙地禁用了插入和删除。

于 2012-03-16T17:03:14.457 回答
2

是的,不要修改有问题的集合。我认为您误解了集合视图的目的。这就是 MSDN 所说的;

您可以将集合视图视为绑定源集合之上的一个层,它允许您基于排序、过滤和分组查询来导航和显示集合,所有这些都无需操作底层源集合本身

所以简而言之,不要推迟刷新,直到你完成添加和删除,否则操作你的集合。

于 2011-05-17T14:55:09.477 回答