DataGrid内部的DataGrid虚拟化

时间:2014-11-18 08:21:10

标签: c# wpf xaml datagrid nested

我需要在DataGrid中创建一个DataGrid。它有效,但我的虚拟化有问题。 使用一个DataGrid,RowVirtualization可以正常工作。现在,当我在DataGrid中创建DataGrid时,来自内部数据网格的虚拟化不起作用,并且加载具有许多行的项目需要很长时间。我认为问题是外部数据网格完全加载一行,在这一行内部有一个包含很多行的数据网格,而RowVirtualization不起作用。

有谁知道如何解决问题?

enter image description here

<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 个答案:

答案 0 :(得分:1)

您可以尝试修复内部数据网格的高度。 这样,只有部分内容会在其中启用滚动的情况下显示。 这将允许内部数据网格的虚拟化,因为它一次只渲染一部分,其余部分将在滚动期间动态渲染,这将提高数据网格加载的速度。