简体   繁体   English

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

[英]WPF DataGrid is slow when select all rows (around 200)

I have a DataGrid which contains around 200 rows and when I try to select all (Ctrl+A) it takes around 5 seconds. 我有一个包含大约200行的DataGrid,当我尝试选择所有(Ctrl + A)时,大约需要5秒。 Rows rendering is fast but not selection. 行渲染速度快但不选择。 So far, I have checked on Converter, Events and Bindings but nothing is called on select. 到目前为止,我已经检查了转换器,事件和绑定,但在select上没有调用任何内容。 Any ideas? 有任何想法吗?

Edit: Here is a piece of code. 编辑:这是一段代码。

ViewModel has a property: ViewModel有一个属性:

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

This property is set once. 此属性设置一次。

XAML looks like this: 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>

Edit 2: Just in case. 编辑2:以防万一。 C# 7.3, .NET 4.7.1 and Windows 7 64bit. C#7.3,.NET 4.7.1和Windows 7 64位。

After hours of searching I found the issue. 经过几个小时的搜索,我发现了这个问题 The class that is in the ObservableCollection has overriden GetHash and Equals and it appears to be that select action in DataGrid is calling those methods for each row upon selection. ObservableCollection中的类已重写GetHash和Equals,并且看起来DataGrid中的select操作在选择时为每一行调用这些方法。

Edit: ...or even for each cell! 编辑:...甚至每个单元格!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM