我有一个用户定义的数据网格(继承自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
。
有谁知道如何进一步隔离问题?
答案 0 :(得分:0)
启用Virtualization
时,特别是当VirtualizationMode
设置为回收时,我已经看到了这种问题。默认情况下,虚拟化在DataGrid
中启用,其模式为回收(虽然不确定模式)。
您可以尝试禁用虚拟化(设置VirtualizingStackPanel.IsVirtualizing="False"
)和/或将VirtualizationMode更改为标准(VirtualizingStackPanel.VirtualizationMode="Standard"
)。
在我的一个应用程序中,我有完全相同的DataGrid实现,具有类似的show / Hide列实现,Virtualization
被禁用,我没有注意到显示/隐藏列的任何问题。