WPF DataGrid的EnableRowVirtualization和VirtualizingStackPanel.IsVirtualizing属性之间的区别

时间:2013-09-24 08:47:13

标签: c# wpf datagrid ui-virtualization

几乎没有关于设置影响的信息;

VirtualizingStackPanel.IsVirtualizing="True" 

EnableRowVirtualization="True" EnableColumnVirtualization="True". 

有人可以澄清区别是什么吗?

另外,作为额外的奖励,任何人都可以澄清EnableRowVirtualization和EnableColumnVirtualization是否在3.5网格上实际执行任何操作,因为MSDN文档仅将这些属性列为4.0,但它们肯定存在于3.5?

感谢。

1 个答案:

答案 0 :(得分:10)

IsVirtualizingEnableRowVirtualization / EnableColumnVirtualization都遵循相同的原则,即只有在需要时才会显示项目,并且会重复使用容器。

基本上,Panel(或Grid)会跟踪可见内容,如果更改,则会使用内部类'ItemContainerGenerator'来调整和构建新项目( http://msdn.microsoft.com/en-us/library/system.windows.controls.itemcontainergenerator.aspx)。

两者的动机是容器只是按需生成,从而节省了内存并提高了性能。

至于为什么有两个:Panel被设计为仅在单一方向上延伸,水平或垂直;所以他们为它实现了一个附加属性。另一方面,Grid以二维方式扩展,因此它们为每个维度实现了一个属性。

另一个区别是学术上的:IsVirtualizing是附加属性,而Grid的对应属性是本机属性。不知道为什么他们选择了这种差异......

相关链接为http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.enablerowvirtualization(v=vs.100).aspxhttp://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingstackpanel.isvirtualizing.aspx