我有一个
WPF DataGrid,它显示的数据集超过60列,行数高达10000. DataGrid可以非常快速地加载完整的数据集并很好地处理它们.
colA colB colC colD colE ...
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
但是,行被分成组.我需要显示一个组头,它是一个文本字符串,并且能够展开/折叠组.
我可以对DataGrid使用分组,它看起来很好但是最初显示大组的速度非常慢.
colA colB colC colD colE ...
^ group title A
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
^ group title B
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
我可以通过添加一个包含组描述的额外列来自己在DataGrid外部进行分组.然后,我可以通过更改提供给网格的数据集来折叠/展开任何组.这是非常快的,但它看起来很垃圾,因为它浪费了很多空间,特别是长队冠军.
group colA colB colC colD colE ...
group title A
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
group title B
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
我想要的是两个世界中最好的,即快速和漂亮,
能够像DataGrid分组一样显示数据,
但要在外部进行分组.
colA colB colC colD colE ...
^ Very long comment about the data ...
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
^ Another arbitrarily long comment...
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
知道如何以这种方式显示我的组头吗?
最佳答案 它可能最初加载速度快,因为它使用虚拟化.这意味着它只加载屏幕上的可见项,而不是所有10000行和60列.我猜测,当分组它必须加载一切,这就是你遇到减速的原因.
要修复它,我可能会调查创建自己的控件(使用虚拟化)并预先对数据进行分组.也许将ItemsControl绑定到分组数据,包括扩展器,当组扩展时,只获取该组的数据并将其加载到另一个itemscontrol中.您可以使用Grid.IsSharedScopeSize和SharedSizeGroup来保持列宽一致.