CollectionView.DeferRefresh()抛出exception

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

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

ICollectionView explained

但是当View被推迟时我得到一个例外,我尝试在集合中添加一些东西。 我不明白为什么不允许这样做。 这就是它的第一点。

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

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

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

您可以将集合视图视为绑定源集合之上的图层,允许您基于排序,filter和组查询来导航和显示集合, 而无需操纵底层源集合本身

因此,简而言之,在完成添加和删除以及操作集合之前,请不要推迟刷新。

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

我认为OP的问题非常有效。 性能非常糟糕,因为我们在大量数据上有多个filter。 DeferRefresh在像ListCollectionView这样的类上有一个真正的目的,但是在你最需要的时候,在插入和删除时会出现莫名其妙的伪装。