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?

+3


source to share


1 answer


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.

+3


source







All Articles