DataGridCheckboxColumn双向绑定

Dan*_*rum 18 wpf xaml datagrid wpfdatagrid .net-3.5

我正在使用.NET 3.5中的WPF工具包中的DataGrid.

我有一个datagrid列绑定到我的源对象的布尔属性.

该复选框正确调用boolean的属性get访问器.

但是,在选中或取消选中该框时,将调用get而不是set.

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Object,  Source={StaticResource model}, Mode=TwoWay}">
        <DataGrid.Columns>
            <DataGridCheckBoxColumn Binding="{Binding BoolProperty, mode=TwoWay}"/>                
        </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

当我使用带有Checkbox的DataGridTemplateColumn时,属性设置正确,但是创建一个漂亮的布局会更复杂.

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox IsChecked="{Binding BoolProperty, Mode=TwoWay}"/>                            
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)

使用DataGridCheckBoxColumn我做错了什么?

小智 48

我遇到了同样的问题,这是我的解决方案

<CheckBox HorizontalAlignment="Center" IsChecked="{Binding BoolProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
Run Code Online (Sandbox Code Playgroud)

  • ````TwoWay```不是必需的,因为它是默认的. (3认同)

Mar*_*lek 37

我的解决方案是将UpdateSourceTrigger设置为PropertyChanged.

<DataGridCheckBoxColumn Header="Bool property" Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}"></DataGridCheckBoxColumn>
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案. (5认同)

H.B*_*.B. 8

DataGrid绑定中,在结束编辑行/单元格之前,不会提交.如果按Enter键,绑定将应用于源.

使用这样的模板会覆盖该行为,但我不建议这样做.也TwoWay没有必要明确设置.


小智 7

我的解决方案是添加带有 Style TargetType="CheckBox" 的 ElementStyle:

<DataGridCheckBoxColumn Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}">
          <DataGridCheckBoxColumn.ElementStyle>
                 <Style TargetType="CheckBox"/>
          </DataGridCheckBoxColumn.ElementStyle>
</DataGridCheckBoxColumn>
Run Code Online (Sandbox Code Playgroud)