Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CollectionView.DeferRefresh()引发异常_C#_Exception_Deferred_Icollectionview - Fatal编程技术网

C# CollectionView.DeferRefresh()引发异常

C# CollectionView.DeferRefresh()引发异常,c#,exception,deferred,icollectionview,C#,Exception,Deferred,Icollectionview,在某些情况下,由于大量INotifyChangedProperties事件,您会有许多UI更新。在这种情况下,当所有属性都像批处理一样设置时,您可能只想向UI发送一次更改信号 我发现了这篇很棒的文章,它解释了如何推迟ViewCollection的刷新: 但是,当视图被延迟时,我会遇到一个异常,我试图向集合中添加一些内容。我不明白为什么这不应该被允许。首先,这就是它的全部意义 无效操作异常: 无法更改或检查的内容或当前位置 正在延迟刷新时的CollectionView 有人知道如何解决这个问题吗

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

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

但是,当视图被延迟时,我会遇到一个异常,我试图向集合中添加一些内容。我不明白为什么这不应该被允许。首先,这就是它的全部意义

无效操作异常: 无法更改或检查的内容或当前位置 正在延迟刷新时的CollectionView

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

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

您可以将集合视图视为 绑定源顶部的层 允许您导航的集合 并基于显示集合 排序、筛选和分组查询,all 而不必操纵 基础源集合本身


因此,简而言之,在完成添加和删除以及处理收藏之前,不要延迟刷新。

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


我认为OP的问题很有道理。性能非常糟糕,因为我们在一组庞大的数据上有多个过滤器。延迟刷新在ListCollectionView这样的类上有着真正的用途,但在你最需要它的时候,它却被莫名其妙地用于插入和删除。

你还没有完全回答Draire1所指出的问题。@Joey:Draire1正在猜测该功能“应该”如何工作,而不是“实际”如何工作。同时,我认为绿色的小复选标记表明OP对答案感到满意。你是对的,文档没有明确地说你“不能”,但由此产生的异常确实如此。同时,如果ListCollectionView没有完成您想要的任务,那么创建您自己的。DeferRefresh仅用于按照classes Refresh方法进行排序、分组和筛选。它的唯一用途是推迟添加新排序、筛选器或组时发生的自动刷新。但确实,暂时忽略对源代码的更改可能会更好。