.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を使用して何が問題になっていますか?
DataGrid
では、行/セルの編集を終了するまでバインディングはコミットされません。 Enterキーを押すと、バインディングがソースに適用されます。
このようなテンプレートを使用すると、その動作がオーバーライドされますが、お勧めしません。また、TwoWay
を明示的に設定する必要はありません。
私はあなたと同じ問題を得ました、これが私の解決策です
<CheckBox HorizontalAlignment="Center" IsChecked="{Binding BoolProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
私の解決策は、UpdateSourceTriggerをPropertyChangedに設定することでした。
<DataGridCheckBoxColumn Header="Bool property" Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}"></DataGridCheckBoxColumn>
私の解決策は、Style TargetType = "CheckBox"でElementStyleを追加することでした:
<DataGridCheckBoxColumn Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}">
<DataGridCheckBoxColumn.ElementStyle>
<Style TargetType="CheckBox"/>
</DataGridCheckBoxColumn.ElementStyle>
</DataGridCheckBoxColumn>