WPF / DeferRefresh与绑定的列表框

4
我正在尝试向一个我已经绑定列表框的集合中推入一些更新。由于列表可能会变得相当大,我正在尝试在插入所有新项目之前关闭更新(排序等)。
我想到了以下解决方案:
using (col.DeferRefesh())
{
   .. add the items
}

但这会引发一个异常,说我不能在DeferRefresh()开启时添加/删除项目。是否有适当的模式来完成我想做的事情?

2个回答

1

在CollectionView中添加或删除项目会导致InvalidOperationException,因为这些操作将IsAddingNewIsEditingItem标志设置为true。

在DeferRefresh()中允许更改排序描述。

这篇博客提供了关于何时使用DeferRefresh()的想法。此外,在实际更改CollectionView中的值时推迟集合视图刷新是相当矛盾的。


3
有些情况下,您可能希望在对集合和集合视图进行一系列更改时暂停更新。 - cordialgerm
泡菜 - 我完全同意!所以这些更改将在 UI 级别而不是代码级别进行。一旦我们退出 using 块,EndDefer() 将自动调用以提交您所做的更改。希望这有所帮助。 - Sushant Khurana

0
要实现这个功能,您需要实现/派生自己的集合,并在集合级别上实现延迟刷新功能,然后在延迟刷新完成时触发一个带有重置作为更改类型的集合更改事件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接