DataGridCheckboxColumn双向绑定

时间:2012-05-18 10:46:37

标签: wpf xaml datagrid .net-3.5 wpfdatagrid

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

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

复选框正确调用boolean的属性get accessor。

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

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Object,  Source={StaticResource model}, Mode=TwoWay}">
        <DataGrid.Columns>
            <DataGridCheckBoxColumn Binding="{Binding BoolProperty, mode=TwoWay}"/>                
        </DataGrid.Columns>
</DataGrid>

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

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox IsChecked="{Binding BoolProperty, Mode=TwoWay}"/>                            
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

使用DataGridCheckBoxColumn我做错了什么?

4 个答案:

答案 0 :(得分:42)

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

<CheckBox HorizontalAlignment="Center" IsChecked="{Binding BoolProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

答案 1 :(得分:34)

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

<DataGridCheckBoxColumn Header="Bool property" Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}"></DataGridCheckBoxColumn>

答案 2 :(得分:8)

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

使用这样的模板会覆盖这种行为,但我不建议这样做。此外,不必明确设置TwoWay

答案 3 :(得分:3)

我的解决方案是使用Style TargetType =“CheckBox”添加ElementStyle:

<DataGridCheckBoxColumn Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}">
          <DataGridCheckBoxColumn.ElementStyle>
                 <Style TargetType="CheckBox"/>
          </DataGridCheckBoxColumn.ElementStyle>
</DataGridCheckBoxColumn>