设置DataGrid中的隐藏列为可见时InvalidOperationException

本文关键字:InvalidOperationException DataGrid 隐藏 设置 | 更新日期: 2023-09-27 18:03:17

我有一个用户定义的数据网格(继承自System.Windows.Controls.DataGrid)与用户定义的列(他们继承自System.Windows.Controls.DataGridColumn)。在列标题(DataGridColumnHeader对象)上有一个上下文菜单,允许用户隐藏和取消隐藏DataGrid中的任何列(在VisibleCollapsed之间切换DataGridColumn.Visibility)。

问题是,有时当将可见性切换回Visible时,InvalidOperationException会在BindingExpressionBase.JoinBindingGroup中引发。这个问题并不总是发生,但可能在10%的情况下。我没有找到任何方法来复制它,而且它似乎并不取决于程序的操作方式(点击速度,点击位置等),因为即使我使用程序来模拟用户输入(AutoHotKey),问题也只会偶尔发生。

到目前为止,我发现BindingExpressionBase.JoinBindingGroup中的以下行有时返回true,有时返回false,用于绑定要重新显示的列中显示的值。只有当返回值是false时才会出现错误(因此它确实有BindingGroup-Feature)。

if (!root.HasValue(Feature.BindingGroup))
我知道只有这么少的信息来帮助我解决这个问题是非常困难的,但是我认为现在提供给你所有的细节是太多了。例如,在DataGrid列中也有用户定义的Control

有谁知道我怎样才能进一步隔离这个问题?

设置DataGrid中的隐藏列为可见时InvalidOperationException

我在启用Virtualization时看到过这种问题,特别是当VirtualizationMode设置为Recycling时。默认情况下,在DataGrid中启用虚拟化,其模式为回收(但不确定模式)。

您可以尝试禁用虚拟化(设置VirtualizingStackPanel.IsVirtualizing="False")和/或将VirtualizationMode更改为标准(VirtualizingStackPanel.VirtualizationMode="Standard")。

在我的一个应用程序中,我有完全相同的DataGrid实现,具有类似的显示/隐藏列实现,禁用Virtualization,我没有注意到显示/隐藏列的任何问题。

相关文章:
  • 没有找到相关文章