DataGrid中的VirtualizingPanel

时间:2013-12-18 14:58:46

标签: c# wpf datagrid stackpanel virtualizingstackpanel

我最近开始探索WPF中的数据和UI虚拟化功能,偶然发现了一些奇怪的东西。

我创建了一个启用了DataGrid的{​​{1}},并在其中填入了包含1,000,000个项目的列表。这种方法效果非常好而且速度惊人。

Virtualizing

但是,当我将其嵌套在<Grid> <DataGrid x:Name="employees" VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.IsContainerVirtualizable="True" VirtualizingPanel.VirtualizationMode="Recycling"/> </Grid> 下时,它会加载超过一分钟,直到我得到StackPanel。我在OutOfMemoryException上设置了相同的VirtualizingPanel属性,但它没有帮助。

这种行为是故意还是我遗漏了一些基本的东西?我如何设法在嵌套控件中支持数据虚拟化?

1 个答案:

答案 0 :(得分:9)

StackPanel是一个“无限容器”(注意引号),因为它不会对其子项的大小施加限制,例如Grid或{{1}确实。

这意味着在UI虚拟化方面,由于DockPanel不限于DataGrid,因此它会无限增长并呈现所有内容,从而有效地失去了UI虚拟化。

有关详细信息,请参阅MSDN: WPF Layout

最重要的是,您需要确保使用适当的布局容器,具体取决于您的需求。