DataGrid inside Datagrid virtualization

穿精又带淫゛_ 提交于 2020-01-25 04:21:05

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!