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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Public Enum Use
    used
    notUsed
    hidden
End Enum
Voilà le code xaml de mon DataGrid :

Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
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 vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
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...