DataGridCheckboxColumn 双向绑定
Posted
技术标签:
【中文标题】DataGridCheckboxColumn 双向绑定【英文标题】:DataGridCheckboxColumn two way binding 【发布时间】:2012-05-25 22:39:18 【问题描述】:我在 .NET 3.5 中使用 WPF 工具包中的 DataGrid。
我有一个数据网格列绑定到源对象的布尔属性。
复选框正在正确调用布尔属性获取访问器。
但是,当检查或取消选中框时,正在调用GET而不是集合。<DataGrid AutoGenerateColumns="False" ItemsSource="Binding Object, Source=StaticResource model, Mode=TwoWay">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="Binding BoolProperty, mode=TwoWay"/>
</DataGrid.Columns>
</DataGrid>
当我改为使用带有复选框的 DataGridTemplateColumn 时,属性设置正确,但是创建漂亮的布局会更加复杂。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="Binding BoolProperty, Mode=TwoWay"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
我在使用 DataGridCheckBoxColumn 时做错了什么?
【问题讨论】:
【参考方案1】:我和你有同样的问题,这是我的解决方案
<CheckBox HorizontalAlignment="Center" IsChecked="Binding BoolProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged"/>
【讨论】:
谢谢先生,我在网上搜索了一段时间才找到这个解决方案。效果很好。TwoWay
不是必需的,因为它是默认设置。【参考方案2】:
我的解决方案是将 UpdateSourceTrigger 设置为 PropertyChanged。
<DataGridCheckBoxColumn Header="Bool property" Binding="Binding BoolProperty, UpdateSourceTrigger=PropertyChanged"></DataGridCheckBoxColumn>
【讨论】:
这是最好的答案。 这应该是答案【参考方案3】:在DataGrid
中,直到您结束对行/单元格的编辑,绑定才会提交。如果您按下回车,绑定将应用回源。
使用这样的模板会覆盖该行为,但我不建议这样做。也不需要显式设置TwoWay
。
【讨论】:
好的,谢谢,在这种情况下,行为是必要的,因为当用户选中我想在屏幕上直观地更新某些内容的框时。有没有办法使用 DatGridCheckBoxColumn 做到这一点?还有什么是最好的方法,这样在初始点击时用户不必点击两次来选择行然后复选框,你能用鼠标悬停事件选择行吗? @DanBrum:我不知道您是否可以使用该列规避此问题,如果您找不到方法,您可以定义自己的 DataGridCheckBoxColumn。应该可以在 MouseOver 上进行选择。【参考方案4】:我的解决方案是使用 Style TargetType="CheckBox" 添加 ElementStyle:
<DataGridCheckBoxColumn Binding="Binding BoolProperty, UpdateSourceTrigger=PropertyChanged">
<DataGridCheckBoxColumn.ElementStyle>
<Style TargetType="CheckBox"/>
</DataGridCheckBoxColumn.ElementStyle>
</DataGridCheckBoxColumn>
【讨论】:
这是最好的答案。谢谢兄弟以上是关于DataGridCheckboxColumn 双向绑定的主要内容,如果未能解决你的问题,请参考以下文章
wpf datagridcheckboxcolumn:如何启用/禁用复选框
WPF DataGridCheckBoxColumn 绑定值后不能选中以及 能选中后,不能进行属性通知