2012-05-18 3 views
13

Ich bin mit dem Datagrid aus dem WPF-Toolkit in .NET 3.5.DataGridCheckBoxColumn Zweiweg Bindung

Ich habe eine Datagrid-Spalte eine boolean Eigenschaft von meinem Quellobjekt gebunden.

Die Checkbox ruft die Eigenschaften des boolean Accessor korrekt erhalten.

jedoch bei der Überprüfung oder die Box unchecking die anstelle des Satzes erhalten wird aufgerufen wird.

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

Wenn ich stattdessen eine Datagridtemplatecolumn mit einem Kästchen zum Ankreuzen in sie verwenden die Eigenschaft korrekt jedoch gesetzt ist, dann ist es komplizierter ein schönes Layout zu erstellen.

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

Was mache ich falsch mit der DataGridCheckBoxColumn?

Antwort

8

In einem DataGrid die Bindungen nicht bekommen, verpflichtet, bis Sie mit der Bearbeitung der Zeile/Zelle beenden. Wenn Sie die Eingabetaste drücken, wird die Bindung wieder auf die Quelle angewendet.

eine Vorlage wie diese, dass das Verhalten Verwenden überschreibt, würde ich allerdings nicht empfehlen. Auch die explizite Einstellung TwoWay sollte nicht notwendig sein.

+0

Ok danke in diesem Fall das Verhalten ist notwendig, da, wenn der Benutzer überprüft die Box Ich möchte visuell aktualisieren etwas auf der Bildschirm. Gibt es Möglichkeiten, dies mit der DatGridCheckBoxColumn zu tun? Auch, was ist der beste Weg, so dass auf dem ersten Klick muss der Benutzer nicht zweimal klicken, um die Zeile dann das Kontrollkästchen auswählen, können Sie die Zeile mit dem Mouseover-Ereignis auswählen? – DanBrum

+0

@DanBrum: Ich weiß nicht, wenn Sie das mit dieser Spalte umgehen können, könnten Sie Ihre eigene DataGridCheckBoxColumn definieren, wenn Sie keinen Weg finden. Auswahl auf MouseOver sollte möglich sein. –

37

Ich habe gleiche Problem mit Ihnen, hier meine Lösung

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

Vielen Dank Sir, ich musste eine Weile im Internet suchen, bevor ich diese Lösung fand. Funktioniert super. – Mash

+2

'' 'TwoWay''' ist nicht notwendig, da es Standard ist. – Den

31

Meine Lösung ist war Update zu Property einzustellen.

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

Dies ist die beste Antwort. – pennyrave

+0

sollte dies die Antwort sein – JobaDiniz

3

war meine Lösung ElementStyle with Style Targettype = „CheckBox“ hinzuzufügen:

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