用ScrollViewer加载2个DataGrids + StackPanel花费的时间太长了,替代方法?

时间:2018-11-15 16:25:47

标签: wpf datagrid scrollview scrollbar

我有3个内容项,两个DataGrid和一个StackPanel在WPF应用程序中都需要一起滚动。只要我只有一个很小的数据集,一切就可以使用ScrollViewer正常运行,但是当我得到150行的500行数据时,在绘制屏幕之前它会滞后8秒钟。读完以下内容后:Unreasonable WPF DataGrid Loading Time我禁用了ScrollViewer,它只用了2.5秒就加载完毕。

<ScrollViewer CanContentScroll="True"
              HorizontalScrollBarVisibility="Visible"
              VerticalScrollBarVisibility="Visible">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="20" />
            <RowDefinition Height="22" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <DataGrid x:Name="DataGridViewHeader" CellEditEnding="ColumnNameUpdate" Grid.Row="0" HeadersVisibility="None" HorizontalAlignment="Stretch" Margin="0,0,0,0"  VerticalAlignment="Stretch"  ItemsSource="{Binding}" CurrentCellChanged="DataGridCellChange" Grid.Column="0" DataGridCell.Selected="DataGrid_GotFocus" />
            <StackPanel Orientation="Horizontal" VerticalAlignment="Top" Name="ComboBoxPanel"  Grid.Row="1"  Margin="0,0,0,0"  HorizontalAlignment="Left" >

            </StackPanel>

        <DataGrid x:Name="DataGridView"  Grid.Row="2"    HeadersVisibility="None"    HorizontalAlignment="Stretch" Margin="0,0,0,0"  VerticalAlignment="Stretch"  ItemsSource="{Binding}" CurrentCellChanged="DataGridCellChange" Grid.Column="0"/>

    </Grid>
</ScrollViewer>

麻烦的是,ScrollViewer提供了以下布局,允许我重命名顶部的列,在第二行中使用下拉菜单选择该列的DataType,然后显示数据。拥有150根色谱柱,它们必须全部排成一列,但是性能受到很大的打击。

虽然我意识到ScrollViewer是一个简单的解决方案,但是在考虑性能时是否有更好的方法呢?

Layout Preview

1 个答案:

答案 0 :(得分:0)

删除ScrollViewer并添加

   VirtualizingStackPanel.IsVirtualizing="True" 
                VirtualizingStackPanel.VirtualizationMode = "recycling"
                EnableColumnVirtualization = "true"
                EnableRowVirtualization = "true"
                  VirtualizingPanel.IsVirtualizingWhenGrouping="True"
                MaxWidth="2560" MaxHeight="1600"