【问题标题】:WPF DataGrid is slow when select all rows (around 200)选择所有行(大约 200 行)时 WPF DataGrid 很慢
【发布时间】:2019-06-12 12:07:00
【问题描述】:

我有一个包含大约 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 位。

【问题讨论】:

  • 将模式改为release,试一次。
  • 你能分享一下属性getter吗?他们有特殊的逻辑吗? + 你有任何装订错误吗? (检查输出 -> 调试窗口)
  • Avinash Reddy,我试过了,结果是一样的。
  • @itaiy,我没有绑定错误。 setter 中根本没有什么特殊的逻辑。

标签: c# wpf mvvm datagrid


【解决方案1】:

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

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

【讨论】:

  • 是的,我刚刚删除了对 GetHash 的覆盖。
  • 什么是 get hash 的覆盖?什么被覆盖了?
  • GetHash 是任何 C# 对象的方法。你可以在你的课堂上覆盖它。我曾经做过并因此而受苦的事情。
猜你喜欢
  • 2012-02-03
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2011-01-30
  • 1970-01-01
  • 2018-08-03
相关资源
最近更新 更多