选择所有行时,WPF DataGrid变慢(大约200行)

时间:2019-06-12 12:07:00

标签: c# wpf mvvm datagrid

我有一个包含大约200行的DataGrid,当我尝试选择全部(Ctrl + A)时,大约需要5秒钟。行渲染速度很快,但选择却不行。到目前为止,我已经检查了Converter,Events和Bindings,但是在select上什么都没有调用。有什么想法吗?

编辑: 这是一段代码。

ViewModel具有一个属性:

        private ObservableCollection<BlaBla> items;
        public ObservableCollection<BlaBla> Items
        {
            get { return items; }
            set { items = value; NotifyPropertyChanged(); }
        }

此属性设置一次。

XAML看起来像这样:

    <DataGrid AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="{Binding IsPerformingSimulations, Converter={StaticResource boolToBoolInvert}}" CanUserReorderColumns="False"
              CanUserResizeColumns="True" CanUserResizeRows="False" CanUserSortColumns="True" GridLinesVisibility="All" SelectionMode="Extended" SelectionUnit="FullRow"
              ItemsSource="{Binding Items}" VirtualizingStackPanel.IsVirtualizing="True">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Bla1" Binding="{Binding Bla1Prop}" IsReadOnly="True" />
            <DataGridTextColumn Header="Bla2" Binding="{Binding Bla2Prop}" IsReadOnly="True" />
            <DataGridTextColumn Header="Bla3" Binding="{Binding Bla3Prop}" IsReadOnly="True" />
            <DataGridTextColumn Header="Bla4" Binding="{Binding Bla4Prop}" IsReadOnly="True" />
            <DataGridTextColumn Header="Bla5" Binding="{Binding Bla5Prop}" IsReadOnly="True" />
        </DataGrid.Columns>
    </DataGrid>

修改2: 以防万一。 C#7.3,.NET 4.7.1和Windows 7 64位。

1 个答案:

答案 0 :(得分:0)

经过数小时的搜索,我发现了问题。 ObservableCollection中的类已覆盖GetHash和Equals,似乎是DataGrid中的select动作在选择时为每一行调用这些方法。

编辑:...甚至每个单元格!