C#WPF DataGrid虚拟化速度缓慢

时间:2019-05-14 10:14:57

标签: c# wpf data-binding datagrid data-virtualization

我有一个DataGrid,具有10-15列,可以包含约100-200行。数据网格放置在Tab控件内(默认情况下不处于焦点状态)。

我试图虚拟化DataGrid,但是当我单击包含DataGrid的选项卡时,程序冻结了大约4-5秒钟,然后该选项卡打开并显示DataGrid。之后,这些行似乎快速滚动,这很好,但是这些列的行为仍然像未虚拟化一样慢。

当我删除要虚拟化的代码(DataGrid标签中的最后4个选项)时,网格立即显示,但滚动速度非常慢且滞后。

以下是我的数据网格代码:

<DataGrid Name="xDataGridFieldConfig" 
     FrozenColumnCount ="1" 
     HorizontalAlignment="Stretch" 
     HorizontalContentAlignment="Stretch" 
     VerticalAlignment="Stretch" 
     Style="{DynamicResource FieldConfigDataGridHeaderStyle}" 
     AutoGenerateColumns="False" 
     CanUserResizeColumns="False" 
     CanUserResizeRows="False" 
     CanUserReorderColumns="False" 
     SelectionMode="Single" 
     GridLinesVisibility="Horizontal" 
     HorizontalGridLinesBrush="#cbcaca" 
     HeadersVisibility="Column" ItemsSource="{Binding FieldConfigCollection}" 
     VerticalScrollBarVisibility="Auto" 
     HorizontalScrollBarVisibility="Visible" 
     VirtualizingPanel.IsVirtualizingWhenGrouping="True" 
     VirtualizingPanel.VirtualizationMode="Standard"  
     VirtualizingPanel.IsVirtualizing="True" 
     ScrollViewer.CanContentScroll="False">

      <DataGrid.Columns>
          <DataGridTextColumn Header="S No." Binding="{Binding Path=ID}" IsReadOnly="True" Width="80"/>

             <!-- using template for custom checkbox -->
             <DataGridTemplateColumn Header="EN" IsReadOnly="False">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <flatcheckbox:FlatCheckBox x:Name="xFlatCheckBoxFieldConfigEN" Margin="0" IsChecked="{Binding Path=Enabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <flatcheckbox:FlatCheckBox x:Name="xFlatCheckBoxFieldConfigEN" Margin="0" IsChecked="{Binding Path=Enabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>

            </DataGridTemplateColumn>

            <DataGridTemplateColumn Header="Group" Width="150">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                       <TextBlock Name="xTextBlockFieldConfigGroup" Text="{Binding Path=Group, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                       <TextBox Name="xTextBlockFieldConfigGroup" IsEnabled="{Binding Enabled}" Text="{Binding Path=Group, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Padding="0" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>

            <!-- 10 similar text-only editable rows -->

       </DataGrid.Columns>

</DataGrid>

我在做错什么吗?打开标签后,如何使数据网格立即显示。

0 个答案:

没有答案