如何从头开始创建一个快速的 WPF Datagrid 控件?

Posted

技术标签:

【中文标题】如何从头开始创建一个快速的 WPF Datagrid 控件?【英文标题】:How to create a fast WPF Datagrid control from scratch? 【发布时间】:2011-07-23 01:14:58 【问题描述】:

过去我一直在使用许多商业 WPF 数据网格,我必须说性能非常令人失望且缓慢。我希望能够加载多达一百万条记录,并且能够快速上下滚动而没有任何延迟。

一些 Guru WPF 开发人员告诉我,确实可以从头开始创建 WPF 数据网格 - 功能远少于商业功能 - 主要关注性能。

但是我该怎么做呢?有人告诉我开发这些数据网格不应该以使用 ItemsControl 的通常方式构建,这会导致与现有 wpf 网格相同的性能问题。

这里有一位大师可以为我指明正确的方向吗?

更新:

因为一个人提到了需要一百万条记录的疑问,所以现在太多人在同一个潮流。我感兴趣的是创建一个几乎没有任何功能的低延迟快速数据网格,理论上可以保存多达一百万条记录。

我不需要任何排序、过滤或其他,我需要的只是速度。这就是我需要大师指导的地方。我知道什么是数据虚拟化,但这还不够。

【问题讨论】:

您的问题不在于可用的控件,而在于百万条记录。正确的方向是建立一个用户界面。 说真的,如果您因为查看一百万个条目而找不到任何东西,那么能够流畅地滚动浏览一百万个条目有什么意义? @H.B. : 关键是很多 WinForms DataGrids 可以流畅地做到这一点(是的,扫描排序列表即使有一百万个条目也很有用) 你过得怎么样?我还需要一个高度自定义的数据网格,我正在考虑编写自己的 @rolls 进展不顺利。尽管聘请了昂贵的顾问并投入了许多资源,但 WPF 并没有因此而被削减。我们最终放弃了并在 WPF 控件中实现了 Winforms 网格。丑陋但实用且快速。 【参考方案1】:

我怀疑您希望将 VirtualisingStackPanel 视为实现的一部分,它只会在控件变得可见时呈现控件。

但是,对于任何用户而言,一百万条记录听起来太多了,任何时候都无法在屏幕上认真地需要。我会认真地重新考虑我的 UI 设计,但这只是我自己。

【讨论】:

Datagrid 虚拟化功能(例如在 Infragistics 等中完成)根本不够性能。 那么您知道哪些方面使其性能不佳吗?瓶颈是什么?你确定它肯定是 UI 吗?从数据库或跨网络获取 100 万条记录是否也可能是问题的一部分?

以上是关于如何从头开始创建一个快速的 WPF Datagrid 控件?的主要内容,如果未能解决你的问题,请参考以下文章

WPF:如何使用 MVVM 将命令绑定到 ListBoxItem?

以编程方式 WPF DataGrid 行双击事件

以编程方式为 DataGrid 创建 WPF DataGridTemplateColumn

如何从头开始创建/编写一个简单的 XML 解析器?

如何使用 AWS CLI 从头开始​​创建堆栈?

git命令入门