【问题标题】:Difference between WPF DataGrid's EnableRowVirtualization and VirtualizingStackPanel.IsVirtualizing propertiesWPF DataGrid 的 EnableRowVirtualization 和 VirtualizingStackPanel.IsVirtualizing 属性之间的区别
【发布时间】:2013-09-24 08:47:13
【问题描述】:

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

VirtualizingStackPanel.IsVirtualizing="True" 

EnableRowVirtualization="True" EnableColumnVirtualization="True". 

有人能解释一下有什么区别吗?

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

谢谢。

【问题讨论】:

    标签: c# wpf datagrid ui-virtualization


    【解决方案1】:

    IsVirtualizingEnableRowVirtualization/EnableColumnVirtualization 的工作原理相同,即项目仅在需要时才可视化,容器可重复使用。

    基本上,Panel(或Grid)跟踪可见的内容,如果更改,它使用内部类'ItemContainerGenerator'来调整和构建新项目(https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.itemcontainergenerator)。

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

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

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

    相关链接为https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.datagrid.enablerowvirtualizationhttps://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.virtualizingstackpanel.isvirtualizing

    【讨论】:

    • 关于 EnableRowVirtualization/EnableColumnVirtualization 属性方向的有趣说明。您能否进一步阐明设置附加属性而不是/以及 EnableRowVirtualization/EnableColumnVirtualization 属性的影响?我知道他们打开/关闭相同类型的行为,但我仍然不明白是否可以使用其中一个,即他们是否具有完全重叠的职责,或者实际上在引擎盖下做了不同的事情?
    • 该行为是在 ItemsControl 级别实现的,因此会影响从它派生的类。 “在引擎盖下”除了方向性之外,算法没有明显的差异。另外......这并不是使用一个设置而不是另一个设置的真正选择,因为当它们可用时应该使用原生属性。
    猜你喜欢
    • 1970-01-01
    • 2011-06-22
    • 2012-08-27
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2015-04-26
    • 2011-06-13
    相关资源
    最近更新 更多