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 :

Combobox : Text et Value


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut Combobox : Text et Value
    Bonjour à tous,

    en ASP.net, dans une combobox j'ai la notion de texte (qui est affiché) et de value (qui est la valeur réelle de la selection...)

    Existe t'il la même chose en WPF ?

    j'ai un objet "Property" qui a un attribut "Type" qui peut avoir comme valeur "Text", "ComboBox", "DateTime", ....

    J'aimerai avoir un écran qui propose, par un combbox, de modifier cette attribut... cependant je ne vais pas afficher la valeur brut mais plutot qqchose comme "Champ texte" pour "Text", "Liste de choix" pour "ComboBox", "Date/Heure" pour "DateTime"

    Comment je peux faire ça ?

    Pour l'instant j'ai un ViewModel :
    Code c# : 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
    30
    31
    32
    33
    34
    35
    36
     
    public class ViewModel
    {
        private Property _property;
        public ObservableCollection<String> Types {get; set;}
     
        public ViewModel(Property property)
        {
            this.Types = new ObservableCollection<String>();
            this.Types.add("Champ texte");
            this.Types.add("Liste de choix");
            this.Types.add("Date/Heure");
        }
     
        public string SelectedType
        {
            get 
            {
                 if (this._property.type == "Text")
                     return "Champ texte";
     
                 else if (this._property.type == "ComboBox")
                     return "Liste de choix";
    ...
            }
           set
           {
                if (value == "Champ texte")
                    this._property.type = "Text";
     
                else if (value == "Liste de choix")
                    this._property.type = "ComboBox";
    ...
           }
     
    }


    et dans mon XAML j'ai un un combobox avec :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    <ComboBox ItemsSource = "{Binding Types}" SelectedItem="{Binding SelectedType}" />

    Cependant je ne trouve pas ça propre du tout... y a t'il une autre façon de faire ?

    Merci

  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 : 44
    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
    Par défaut
    Crée une classe ou une structure qui contient la valeur et le texte à afficher

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct PropertyType
    {
        public string Type { get; set; }
        public string DisplayName { get; set; }
    }

    et expose une collection de PropertyType :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    public ObservableCollection<PropertyType> Types {get; set;}

    Dans le code XAML, utilise les propriété SelectedValuePath et DisplayMemberPath pour indiquer les propriétés correspondant à la valeur et au texte affiché :

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <ComboBox ItemsSource="{Binding Types}"
              SelectedValuePath="Type"
              DisplayMemberPath="DisplayName"
              SelectedValue="{Binding SelectedType}" />

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    merci, cependant j'ai du oublier quelque chose car j'ai bien ma liste d'initialisé dans ma combobox mais pas les valeurs sélectionnées :

    Initialisation dans le XAML :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <ComboBox ItemsSource="{Binding Types}" 
                          SelectedValue="{Binding SelectedType, Mode=TwoWay}" 
                          DisplayMemberPath="DisplayName"
                          SelectedValuePath="Type"
                          Margin="5"  Grid.Column="1" Grid.Row="0" ></ComboBox>

    Initialisation des valeurs
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      this.Types = new ObservableCollection<PropertyType>();
                this.Types.Add(new PropertyType() { DisplayName = "Une seule ligne de texte", Type = "Text" });
                this.Types.Add(new PropertyType(){ DisplayName = "Liste de choix", Type = "ComboBox"});

    Et pour la sélection :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            public PropertyType SelectedType
            {
                get
                {
                    PropertyType selectedType = this.Types.First(pt => pt.Type == this._property.type);
                    return selectedType;
                }
                set
                {
                    PropertyType pt = (PropertyType) value;
                    this._property.type = pt.Type;
                }
            }

    il rentre bien dans le get (récupère la bonne valeur) mais il ne la sélectionne pas dans la combobox... de plus il ne pas pas dans le set...

    Merci de votre aide

  4. #4
    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 : 44
    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
    Par défaut
    Ton SelectedType doit être de type string, pour que ça corresponde au SelectedValuePath qui se base sur la propriété Type

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    parfait, ça marche, merci

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 97
    Par défaut
    Salut,
    Sinon, en plus propre, tu peux utiliser les Converter.
    En gros tu te bind sur ta valeur "brute" et le converter se charge d'afficher un texte propre pour l'utilisateur.
    Ca évite de se trimbaler une structure contenant le texte à afficher.

    Tu as un exemple ici :
    http://msdn.microsoft.com/fr-fr/libr...converter.aspx

    Dans l'exemple, le TextBlock est bindé sur StartDate qui est de type DateTime.
    Le converter affiche la date sous sa forme ToShortDateString().

    Bon code.

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

Discussions similaires

  1. combobox.text = textbox
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/08/2007, 21h14
  2. text area value toujours nulle
    Par keub51 dans le forum Langage
    Réponses: 2
    Dernier message: 18/04/2007, 11h54
  3. [ComboBox] Retourner une valeur différente de ComboBox.Text
    Par nicolas.pied dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/02/2007, 20h01
  4. Combobox.text qui ne se met pas à jour
    Par davels dans le forum Delphi
    Réponses: 6
    Dernier message: 21/08/2006, 10h29
  5. combobox->text
    Par clovis dans le forum C++Builder
    Réponses: 18
    Dernier message: 21/06/2002, 15h43

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