我需要在DataGrid中创建一个DataGrid。它有效,但我的虚拟化有问题。 使用一个DataGrid,RowVirtualization可以正常工作。现在,当我在DataGrid中创建DataGrid时,来自内部数据网格的虚拟化不起作用,并且加载具有许多行的项目需要很长时间。我认为问题是外部数据网格完全加载一行,在这一行内部有一个包含很多行的数据网格,而RowVirtualization不起作用。
有谁知道如何解决问题?
<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>
答案 0 :(得分:1)
您可以尝试修复内部数据网格的高度。 这样,只有部分内容会在其中启用滚动的情况下显示。 这将允许内部数据网格的虚拟化,因为它一次只渲染一部分,其余部分将在滚动期间动态渲染,这将提高数据网格加载的速度。