2012-05-18 27 views
13

.NET 3.5のWPFツールキットのDataGridを使用しています。DataGridCheckboxColumn双方向バインディング

私は、ソースオブジェクトのブール値プロパティにバインドされたデータグリッド列を持っています。

このチェックボックスは、ブール値のプロパティを正しく呼び出す呼び出しです。

ただし、チェックボックスをオンまたはオフにすると、セットではなくゲットが呼び出されます。

<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を使用して間違っていますか?

答えて

8

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

このようなテンプレートを使用すると、その動作が無効になりますが、私はそれを推奨しません。明示的にTwoWayと設定する必要はありません。

+0

ユーザーがボックスをチェックしたときに、私は視覚的に何かを更新したいと、この場合は[OK]をおかげで行動が必要ですスクリーン。 DatGridCheckBoxColumnを使用してこれを行う方法はありますか?また、どのような最善の方法は、クリックして、クリックして2回クリックする必要はありません、クリックしてチェックボックス、あなたはmouseoverイベントで行を選択できますか? – DanBrum

+0

@ DanBrum:この列を使用してこれを回避できるかどうかわかりません。方法が見つからない場合は、独自のDataGridCheckBoxColumnを定義できます。 MouseOverでの選択が可能でなければなりません。 –

37

私はあなたと同じ問題を抱えて、ここに私の解決策は、私のソリューションは、にPropertyChangedにUpdateSourceTriggerを設定することでした

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

ありがとう、私はこの解決策を見つける前にしばらくウェブを検索しなければならなかった。よく働く。 – Mash

+2

'' 'TwoWay'''はデフォルトでは必要ありません。 – Den

31

です。

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

これは最高の答えです。 – pennyrave

+0

これが答えになるはずです – JobaDiniz

3

私のソリューションは、スタイルのTargetType =「チェックボックス」とElementStyleを追加しました:

<DataGridCheckBoxColumn Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}"> 
      <DataGridCheckBoxColumn.ElementStyle> 
       <Style TargetType="CheckBox"/> 
      </DataGridCheckBoxColumn.ElementStyle> 
</DataGridCheckBoxColumn> 
関連する問題