WPF:将DataGrid中的隐藏列设置为可见时出现InvalidOperationException

时间:2015-07-18 15:24:16

标签: c# wpf datagrid

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

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

我到目前为止发现的是,InvalidOperationException中的后续行有时会返回BindingExpressionBase.JoinBindingGroup,有时会返回true,以便绑定显示在列中的值重新显示。如果返回的值为false(因此它具有false),则只会出现错误。

BindingGroup-Feature

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

有谁知道如何进一步隔离问题?

1 个答案:

答案 0 :(得分:0)

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

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

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