web-dev-qa-db-ja.com

DataGridCheckboxColumn双方向バインディング

.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を使用すると、プロパティが正しく設定されますが、Niceレイアウトを作成する方が複雑になります。

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

DataGridCheckBoxColumnを使用して何が問題になっていますか?

20
DanBrum

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

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

8
H.B.

私はあなたと同じ問題を得ました、これが私の解決策です

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

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

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

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

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