J'utilise le DataGrid de la boîte à outils WPF dans .NET 3.5.
J'ai une colonne de grille de données liée à une propriété booléenne de mon objet source.
La case à cocher appelle correctement les propriétés du booléen get accessor.
Cependant, lorsque vous cochez ou décochez la case, le get au lieu de l'ensemble est appelé.
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Object, Source={StaticResource model}, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding BoolProperty, mode=TwoWay}"/>
</DataGrid.Columns>
</DataGrid>
Lorsque j'utilise à la place un DataGridTemplateColumn avec une case à cocher, la propriété est correctement définie, mais il est plus compliqué de créer une mise en page agréable.
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding BoolProperty, Mode=TwoWay}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Que fais-je de mal en utilisant DataGridCheckBoxColumn?
Dans un DataGrid
, les liaisons ne sont pas validées tant que vous n'avez pas terminé l'édition de la ligne/cellule. Si vous appuyez sur Entrée, la liaison s'appliquera de nouveau à la source.
L'utilisation d'un modèle comme celui-ci remplace ce comportement, je ne le recommanderais cependant pas. La définition explicite de TwoWay
ne devrait pas non plus être nécessaire.
J'ai le même problème avec toi, voici ma solution
<CheckBox HorizontalAlignment="Center" IsChecked="{Binding BoolProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
Ma solution était de définir UpdateSourceTrigger sur PropertyChanged.
<DataGridCheckBoxColumn Header="Bool property" Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}"></DataGridCheckBoxColumn>
Ma solution a été d'ajouter ElementStyle avec Style TargetType = "CheckBox":
<DataGridCheckBoxColumn Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}">
<DataGridCheckBoxColumn.ElementStyle>
<Style TargetType="CheckBox"/>
</DataGridCheckBoxColumn.ElementStyle>
</DataGridCheckBoxColumn>