【问题标题】:DataGridCheckboxColumn two way bindingDataGridCheckboxColumn 双向绑定
【发布时间】: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 时做错了什么?

【问题讨论】:

    标签: wpf xaml datagrid .net-3.5 wpfdatagrid


    【解决方案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>
    

    【讨论】:

    • 这是最好的答案。谢谢兄弟
    猜你喜欢
    • 2018-06-20
    • 2011-02-02
    • 2013-06-15
    • 2015-04-26
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多