【发布时间】:2012-04-14 12:22:14
【问题描述】:
我们目前有一个绑定到DataTable 的DataGrid。它还有一个模板列,其中包含我们以编程方式添加的CheckBox。本专栏的目的是跟踪DataGrid 中的多项选择。
工厂用于为每一行创建CheckBoxes。
记录不少,所以行虚拟化设置为true,这样性能可以接受。但是,我们看到一个奇怪的问题,如果我们在前 10 行检查一些 CheckBoxes,然后向下滚动大约 50 行(网格在任何时候都有大约 10 行可见),还有一堆其他的CheckBoxes 似乎是随机检查的。
如果我们禁用行虚拟化,则不存在此问题(但性能很糟糕)。有没有办法解决?有谁知道我们可能做错了什么?
【问题讨论】:
-
当您说移除虚拟化后性能很糟糕时,是加载还是滚动时很糟糕。如果它正在加载,有一个解决方案可以让它不那么糟糕,滚动是另一个问题......
-
它仅在加载时。所有的性能损失都在包含 DataGrid 的窗口的 Show 方法上。使用行虚拟化,在 DataGrid 中显示 2,500 条记录需要 200 毫秒。如果没有行虚拟化,则需要 28 秒。
-
为你添加了一些代码...几天前刚刚在工作中调整了性能,就像一个魅力
标签: wpf datagrid row virtualization