Binding checkbox à 3 états sur un type enum
Bonjour,
Depuis quelques jours j'essaie de réaliser un binding entre une Checkbox à 3 états (ou plutot une DataGridCheckBoxColumn) et un type Enum que j'ai créé.
Voilà mon type Enum que j'ai nommé "Use" :
Code:
1 2 3 4 5
| Public Enum Use
used
notUsed
hidden
End Enum |
Voilà le code xaml de mon DataGrid :
Code:
1 2 3 4 5 6 7 8 9
| <DataGrid ItemsSource="{Binding Services, Mode=TwoWay}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Use" IsThreeState="True" Binding="{Binding Use, Converter={StaticResource utbconverter}, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Mask" Binding="{Binding IPMask}"/>
<DataGridTextColumn Header="Group" Binding="{Binding Group}"/>
<DataGridTextColumn Header="VLAN" Binding="{Binding VLAN}"/>
</DataGrid.Columns>
</DataGrid> |
Et enfin le code de mon convertisseur Use vers Boolean :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| Public Class UseToBoolConverter
Implements IValueConverter
Function Convert(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
Dim v As Use = CType(value, Use)
Dim res As Nullable(Of Boolean)
If v = Use.notUsed Then
res = False
ElseIf v = Use.used Then
res = True
Else
res = Nothing
End If
Return res
End Function
Function ConvertBack(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
If value = False Then
Return Use.notUsed
ElseIf value = True Then
Return Use.used
Else
Return Use.hidden
End If
End Function
End Class |
Et du coup, ce que je ne comprends pas c'est que ma CheckBox n'a que 2 états quand je clique dessus. J'ai essayé de remplacer mon type Use par un Nullable Boolean et ça fonctionne (sans convertisseur bien sûr). Mais l'idée c'était de gardé mon type Use qui est beaucoup plus clair à utiliser das le code.
Si quelqu'un a une idée...