鉴于以下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
而不显示任何问题。
这种行为有解释吗?
答案 0 :(得分:4)
DataGrid.EnableColumnVirtualization
仅在有数据显示在这些列中并且其可见性设置为可见时才创建列。这种破坏了整个Visibility=Visibility.Visible
期望。
如果您需要列标题,即使没有数据,也不要启用列虚拟化,但要保持行虚拟化。
DataGrid.EnableRowVirtualization
仅创建将在屏幕上显示的行。当与VirtualizingPanel.VirtualizationMode=Recycling
结合使用时,它可以真正改善用于在应用程序中显示可视元素的内存量,这样您几乎不会经常访问垃圾回收。