问题
I need to create a DataGrid inside a DataGrid. It works but I have a problem with the virtualization. With one DataGrid, the RowVirtualization works fine. Now, when I create a DataGrid inside a DataGrid, the virtualization from the inner datagrid doesn't work and it takes very long to load an item with many rows. I think the problem is the outer datagrid which loads one row completely and inside this row there is the datagrid with a lot of rows and the RowVirtualization doesn't work.
Does anyone have an idea how to fix the problem?

<DataGrid x:Name="TestsGroupsDataGrid" Grid.Row="0" DataContext="{Binding TestsGroupsViewModel}"
AutoGenerateColumns="False"
HeadersVisibility="None"
ItemsSource="{Binding TestsGroups}"
SelectionMode="Extended"
SelectionUnit="CellOrRowHeader"
GridLinesVisibility="None" BorderThickness="0,0,0,0"
ScrollViewer.CanContentScroll="True"
EnableRowVirtualization="True"
EnableColumnVirtualization="True"
VirtualizingPanel.VirtualizationMode="Standard"
VirtualizingPanel.ScrollUnit="Pixel"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.CacheLengthUnit="Pixel"
>
<DataGrid.Columns>
<DataGridTemplateColumn Header="DataGridsInside" IsReadOnly="True" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<dataGridInDataGrid:TestsGroupControl x:Name="TestsGroup"
AutoGenerateColumns="False"
ItemsSource="{Binding Tests}"
SelectionMode="Extended"
SelectionUnit="CellOrRowHeader"
GridLinesVisibility="Horizontal"
ScrollViewer.CanContentScroll="True"
EnableRowVirtualization="True"
EnableColumnVirtualization="True"
VirtualizingPanel.VirtualizationMode="Standard"
VirtualizingPanel.ScrollUnit="Pixel"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.CacheLengthUnit="Pixel"
/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
回答1:
Can you try fixing the height of the inner datagrid. That way only a portion of it would be displayed with scrolling enabled inside it. This will allow virtualization of the inner datagrid since only a portion of it is rendered at a time and the rest would be dynamically rendered during scrolling and it will increase the speed with which your datagrid's are loaded.
来源:https://stackoverflow.com/questions/26989618/datagrid-inside-datagrid-virtualization