WPF DataGrid v fast,分组v慢.如何在不使用分组的情况下显示组行

我有一个
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来保持列宽一致.

点赞