【发布时间】:2011-07-29 08:44:46
【问题描述】:
我应该使用什么 WPF 控件来构建高性能网格?
我希望能够进行单元格级别控制,这样我就可以更新单元格并让网格仅重绘该单元格。
DataGrid 似乎没有提供单元格级别的控制。
我需要支持 10000 行的大量单元格更新(比如每秒 200 行)。
谢谢
【问题讨论】:
-
是每秒 200 个单元格还是每秒 200 个?
-
200 每秒 - 谢谢
我应该使用什么 WPF 控件来构建高性能网格?
我希望能够进行单元格级别控制,这样我就可以更新单元格并让网格仅重绘该单元格。
DataGrid 似乎没有提供单元格级别的控制。
我需要支持 10000 行的大量单元格更新(比如每秒 200 行)。
谢谢
【问题讨论】:
如果您不想尝试第 3 方数据网格,那么您是否至少尝试过 WPF Datagrid?它确实支持行和列级别的虚拟化。加上单元格级别控制可通过 CellStyle 用于 DataGridCell 类型。您甚至可以将任何行为附加到 DataGridCell,然后获得对其的独占访问权限并深入了解其可视化树并在本地对其内容执行任何类型的性能改进。
我一直在使用 WPF 数据网格来满足各种需求(没有行定义和组样式的分层数据显示、频繁的数据更新、大量的列、频繁的可编辑和基于验证的场景、装饰虚拟化单元格和延迟滚动以及对滚动启发式的猜测等等。)
您可以尽情享受它。 Codeplex 网站提供了最后一个基于工具包的 WPF 数据网格的源代码。
如果这有帮助,请告诉我。
【讨论】:
如果您需要性能,最好的选择是衡量、衡量、衡量。
使用您正在查看的每个 DataGrid 类,使用“真实的”示例数据构建一个快速原型。
查看哪些表现良好,哪些表现不佳。
【讨论】:
用于 WPF 的 Telerik RadGrid 支持行虚拟化和列虚拟化,可能是您正在寻找的。p>
【讨论】:
EnableRowVirtualization 和一个EnableColumnVirtualization 属性,所以它同时支持这两个属性。只是默认不同:RowVirtualization 默认开启,ColumnVirtualization 关闭。
由于数据量巨大且更新速度相对较高,我不会先验地拒绝 winform 方法。在类似的场景中,您可以管理更多的数据而不会显着影响性能。
我是 WPF 的忠实粉丝,但它并不总是能解决所有问题。
【讨论】: