How does EnableColumnVirtualization work in DataGrid?
Considering the following 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>
Why doesn't it show the lines? When I uninstall EnableColumnVirtualization
or install it on false
, everything is fine. EnableRowVirtualization
can be added or removed without any problem.
Is there an explanation for this behavior?
source to share
DataGrid.EnableColumnVirtualization
only creates columns when data is displayed in those columns and visibility becomes visible. This view destroys all expectations Visibility=Visibility.Visible
.
If you require column headers even when there is no data, then don't enable column virtualization, but keep row virtualization.
DataGrid.EnableRowVirtualization
only creates lines to be displayed on the screen. When combined with VirtualizingPanel.VirtualizationMode=Recycling
it, it can really improve the amount of memory used to render visuals in your application so that you don't end up in garbage collection nearly as often.
source to share