DataGrid中的EnableColumnVirtualization如何工作?

时间:2015-07-14 08:00:53

标签: wpf datagrid

鉴于以下Datagrid

<DataGrid AutoGenerateColumns="False" HeadersVisibility="Column" 
        IsReadOnly="True"
        VirtualizingPanel.IsVirtualizing="true" VirtualizingPanel.VirtualizationMode="Standard"
        EnableColumnVirtualization="True"
        ItemsSource="{Binding Data, IsAsync=True}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Header1" Width="Auto" Binding="{Binding Property1}" />
        <DataGridTextColumn Header="Header2" Width="Auto" Binding="{Binding Property2, Mode=OneWay}" />
    </DataGrid.Columns>
</DataGrid>
</Grid>

为什么不显示任何行?当我删除EnableColumnVirtualization或将其设置为false时,一切正常。可以添加或删除EnableRowVirtualization而不显示任何问题。

这种行为有解释吗?

1 个答案:

答案 0 :(得分:4)

DataGrid.EnableColumnVirtualization仅在有数据显示在这些列中并且其可见性设置为可见时才创建列。这种破坏了整个Visibility=Visibility.Visible期望。

如果您需要列标题,即使没有数据,也不要启用列虚拟化,但要保持行虚拟化。

DataGrid.EnableRowVirtualization仅创建将在屏幕上显示的行。当与VirtualizingPanel.VirtualizationMode=Recycling结合使用时,它可以真正改善用于在应用程序中显示可视元素的内存量,这样您几乎不会经常访问垃圾回收。