IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Binding checkbox à 3 états sur un type enum


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Points : 18
    Points
    18
    Par défaut 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 : 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...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    En VB.NET un Object qui vaut Nothing est considéré comme égal à False (ce qui est une aberration, mais bon, avec VB on n'est plus à ça près... enfin, je suppose que c'est pas pire que les règles d'égalité en PHP ). Donc dans ton ConvertBack, si CheckBox.IsChecked est Nothing (état indéterminé), tu entres dans le block If value = False Then, et donc tu ne rentres jamais dans le dernier Else

    Si tu fais un cast de la valeur en Nullable(Of Boolean) ça devrait marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        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
            Dim b As Nullable(Of Boolean) = CType(value, Nullable(Of Boolean))
            If b = False Then
                Return Use.notUsed
            ElseIf b = True Then
                Return Use.used
            Else
                Return Use.hidden
            End If
        End Function
    (sinon tu peux aussi tester b.HasValue et b.Value)

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Bien vu ! Merci beaucoup. ça fonctionne nickel.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/07/2011, 12h04
  2. Réponses: 3
    Dernier message: 11/10/2010, 12h50
  3. ManyToMany sur un type enum
    Par storm_2000 dans le forum Hibernate
    Réponses: 0
    Dernier message: 08/09/2009, 22h00
  4. new sur un type enum
    Par ZaaN dans le forum C#
    Réponses: 2
    Dernier message: 12/09/2008, 14h34
  5. Précision sur les types Enum et Set
    Par Djakisback dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/12/2006, 13h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo