DataGrid 中的 EnableColumnVirtualization 如何工作?

Ger*_*ard 5 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>
Run Code Online (Sandbox Code Playgroud)

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

这种行为有解释吗?

Ber*_*sch 6

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

如果您需要即使在没有数据的情况下也有列标题,那么不要启用列虚拟化,而是保持行虚拟化。

DataGrid.EnableRowVirtualization只创建将在屏幕上可见的行。与 结合使用时VirtualizingPanel.VirtualizationMode=Recycling,它可以真正提高用于在应用程序中显示可视元素的内存量,这样您就不会经常遇到垃圾收集。