WPF DataGrid 中的自定义复选框不更新绑定
Posted
技术标签:
【中文标题】WPF DataGrid 中的自定义复选框不更新绑定【英文标题】:Custom CheckBox in WPF DataGrid does not update binding 【发布时间】:2011-02-24 23:22:06 【问题描述】:我有以下(简化的)风格:
<Style x:Key="MyStyle" TargetType="x:Type CheckBox">
<Setter Property="Background" Value="Blue" />
</Style>
如果我将它用作 DataGridCheckBoxColumn 中的 ElementStyle 和 EditingElementStyle:
<DataGridCheckBoxColumn Binding="Binding IsEnabled"
ElementStyle="StaticResource MyStyle"
EditingElementStyle="StaticResource MyStyle" />
然后,当我选中/取消选中一行的复选框时,我的绑定 IsEnabled
不会切换。如果我删除 ElementStyle、EditingElementStyle 或两者中的任何一个,则绑定更新没有问题。这是为什么?!
另外,我尝试使用以下代码解决此问题:
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="Binding IsEnabled"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
但是,问题仍然存在。
【问题讨论】:
【参考方案1】:对不起,我想我在 Stack Overflow 上找到了一个更好的解决方案,这可能会帮助人们最终在此页面上搜索解决方案。
https://***.com/a/7270548/3082531
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="Binding Path=IsSelected, UpdateSourceTrigger=PropertyChanged" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
我试过了,它对我来说效果很好,比公认的解决方案更简单,而且不需要额外点击复选框。
【讨论】:
同意 - 这很简单。【参考方案2】:首先,您断言如果您删除 ElementStyle
或 EditingElementStyle
解决问题是不正确的,那么让您感到困惑的是 ElementStyle
。
问题是,要进行编辑,数据网格必须切换到编辑模板,这通常在鼠标单击时执行,但是,由于CheckBox
处理鼠标单击事件,数据网格永远不会得到它,并且永远不会进入编辑模式,从而防止您的更改到达您的数据对象(它保留在数据视图中,但不会传递给源数据)。
现在您可能会问,为什么默认行为可以?好吧,如果您查看ElementStyle
属性的默认值,您会注意到它将IsHitTestVisible
和Focusable
都设置为false。这可以防止CheckBox
处理更改其状态的鼠标单击(或键盘事件),并允许数据网格接收它们,从而使其更改进入编辑模式并切换到EditingElementStyle
,这不会影响可聚焦性和命中可测试性。
查看此博客条目以获取有关如何正确执行此操作的示例When is a WPF DataGrid read-only CheckBox not read-only?
【讨论】:
以上是关于WPF DataGrid 中的自定义复选框不更新绑定的主要内容,如果未能解决你的问题,请参考以下文章