在WPF DataGrid中自定义的CheckBox无法更新绑定。

34 浏览
0 Comments

在WPF DataGrid中自定义的CheckBox无法更新绑定。

我有以下(简化的)样式:


如果我在DataGridCheckBoxColumn中将其用作ElementStyle和EditingElementStyle:


那么我的绑定IsEnabled在勾选/取消勾选行复选框时不会切换。如果我删除ElementStyle、EditingElementStyle,或者两者都删除,那么绑定会正常更新。为什么会这样?!

此外,我尝试使用以下代码解决问题:


    
        
            
        
    

然而,问题仍然存在。

0
0 Comments

问题的原因是因为当使用自定义的CheckBox作为WPF DataGrid中的一个列时,绑定不会更新。这是因为CheckBox处理了鼠标点击事件,导致DataGrid无法进入编辑模式,从而阻止了绑定的更新。

解决方法是修改CheckBox的ElementStyle属性,将其设置为允许鼠标点击事件的处理。默认情况下,ElementStyle的IsHitTestVisible和Focusable属性都被设置为false,这会阻止CheckBox处理鼠标点击事件。修改ElementStyle属性后,DataGrid就能够接收到鼠标点击事件,进入编辑模式,并切换到EditingElementStyle。

参考一个博客文章When is a WPF DataGrid read-only CheckBox not read-only?中的示例,了解如何正确地实现这一点。

0
0 Comments

这个问题的原因是在WPF DataGrid中使用自定义的CheckBox时,绑定不会自动更新。解决方法是使用DataGridTemplateColumn.CellTemplate,并将IsChecked属性绑定到IsSelected属性,并设置UpdateSourceTrigger为PropertyChanged。

解决方法代码如下:


    
        
    

这个方法比接受的解决方案更简单,并且消除了额外点击复选框的需要。其他人也表示同意这个解决方法很直接。

0