Wpf ListBox中DataGrid的虚拟化

Wpf ListBox中DataGrid的虚拟化,wpf,datagrid,listbox,ui-virtualization,nested-controls,Wpf,Datagrid,Listbox,Ui Virtualization,Nested Controls,我的布局: 外部列表框的虚拟化可以工作,但内部数据网格的虚拟化不能工作。可能是因为外部的列表框包含ScrollViewer内部: ScrollViewer提供了一个查看其子内容的窗口。问题是子内容被赋予了无限的虚拟空间。在这个虚拟空间中,DataGrid以完整的大小呈现自己,并显示其所有子项 看起来没有简单的解决方案。 但我甚至想要一个解决办法。也许是为了限制ScrollViewer的虚拟空间?我不确定ScrollViewer是第一个受到指责的人。ListBox使用垂直方向的StackPane

我的布局:

外部
列表框的虚拟化可以工作,但内部
数据网格的虚拟化不能工作。可能是因为外部的
列表框
包含
ScrollViewer
内部:

ScrollViewer
提供了一个查看其子内容的窗口。问题是子内容被赋予了无限的虚拟空间。在这个虚拟空间中,
DataGrid
以完整的大小呈现自己,并显示其所有子项

看起来没有简单的解决方案。

但我甚至想要一个解决办法。也许是为了限制ScrollViewer的虚拟空间?

我不确定ScrollViewer是第一个受到指责的人。ListBox使用垂直方向的StackPanel作为ItemsPanel。垂直堆叠面板不限制子元素的高度


不要更改容器空间,而是通过设置
DataGrid.MaxHeight
来限制DataGrid的大小,StackPanel不会给它超过该限制的高度。然后ScrollViewer将被限制为所有DataGrid的总大小。

刚刚在这里找到了类似的答案

您可以尝试固定内部数据网格的高度吗。那样的话,只会显示其中的一部分,并在其中启用滚动。这将允许内部
datagrid
的虚拟化,因为一次只渲染其中的一部分,其余部分将在滚动期间动态渲染,这将提高
datagrid的
的加载速度


如果有帮助,请通过上面的链接向上投票他的答案

尝试设置
DataGrid.MaxHeight
。这肯定会限制数据网格的空间。顺便说一句,你是如何发现虚拟化对DG不起作用的?真的,
MaxHeight
起作用了,没想到这么简单的东西就能解决这个问题。谢谢请转换为答案,我会标记它。通过呈现单个
DataGrid
,在
ListBox
中包含
10000
行,或不包含该行来检测。