28

.NET 3.5 の WPF ツールキットの DataGrid を使用しています。

ソース オブジェクトのブール プロパティにバインドされた datagrid 列があります。

チェックボックスは、ブール値のプロパティ get アクセサーを正しく呼び出しています。

ただし、ボックスをオンまたはオフにすると、set ではなく 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 を使用して何が間違っていますか?

4

4 に答える 4

54

私はあなたと同じ問題を抱えています、ここに私の解決策があります

<CheckBox HorizontalAlignment="Center" IsChecked="{Binding BoolProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
于 2013-03-21T14:24:40.323 に答える
46

私の解決策は、UpdateSourceTrigger を PropertyChanged に設定することでした。

<DataGridCheckBoxColumn Header="Bool property" Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}"></DataGridCheckBoxColumn>
于 2014-10-17T07:00:27.840 に答える
11

行/セルの編集を終了するDataGridまでバインディングはコミットされません。Enter キーを押すと、バインディングがソースに適用されます。

このようなテンプレートを使用すると、その動作が上書きされますが、お勧めしません。また、TwoWay明示的に設定する必要はありません。

于 2012-05-18T10:50:30.427 に答える
7

私の解決策は、Style TargetType="CheckBox" で ElementStyle を追加することでした:

<DataGridCheckBoxColumn Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}">
          <DataGridCheckBoxColumn.ElementStyle>
                 <Style TargetType="CheckBox"/>
          </DataGridCheckBoxColumn.ElementStyle>
</DataGridCheckBoxColumn>
于 2016-07-29T09:56:04.093 に答える