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 :

Affichage de données différent en fonction de la sélection d'une ComboBox


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut Affichage de données différent en fonction de la sélection d'une ComboBox
    Bonjour,

    J'aimerai avoir des conseils sur la meilleure manière de faire la chose suivante :

    - J'ai un TextBlock affichant une valeur numérique (valeur numérique qui est contenue dans une variable membre de ma classe).
    - J'ai une ComboBox contenant comme valeurs des types de représentation pour les valeurs numériques (normal, scientifique, binaire, hexadécimal, etc)
    - J'aimerai que la valeur du TextBlock soit affichée avec la notation sélectionnée dans la ComboBox.

    Comment puis-je réaliser ceci le plus proprement possible ?
    Au départ je pensais pouvoir utiliser les Converter, mais je ne sais pas comment faire le lien entre le TextBlock et la ComboBox.
    Dois-je utiliser un Template ?
    Y'a d'autres solutions ?

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Je vois bien une solution mais c'est pas propre: tu peux t'abonner à l'évent KeyPress de la TextBox et formater son contenu en fonction de la Combox.

  3. #3
    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
    Tu dois pouvoir faire ça en utilisant un DataTemplateSelector, qui renverrait tel ou tel DataTemplate selon la sélection du ComboBox

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    J'y avais pensé aussi mais le pb, c'est que le DataTemplateSelector, il va l'appliquer à la Combo or lui, c'est la TextBox qu'il veut formater...

  5. #5
    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
    Citation Envoyé par Thomas Lebrun Voir le message
    J'y avais pensé aussi mais le pb, c'est que le DataTemplateSelector, il va l'appliquer à la Combo or lui, c'est la TextBox qu'il veut formater...
    Non, c'est pas à la combo qu'il faut l'appliquer, mais à un ContentPresenter (via la propriété ContentTemplateSelector). A la place de la TextBox, tu mets un ContentPresenter, et tu définis autant de DataTemplates qu'il y a de formats d'affichage. Pas très "dynamique", mais bon...
    Remarque, en étant bourrin on pourrait même envisager de générer dynamiquement le template dans le DataTemplateSelector

    EDIT: En fait, y a un moyen encore mieux, sans DataTemplateSelector : mettre la liste des DataTemplates directement dans la combobox, et binder le ContentTemplate du ContentPresenter directement sur le SelectedItem.
    Le seul problème c'est qu'un DataTemplate n'a pas de nom, donc il faut faire un petit wrapper pour l'affichage :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class NamedItem
    {
        public string Name { get; set; }
        public object Item { get; set; }
    }
    Dans le XAML :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <ComboBox Name="cmbTemplates" DisplayMemberPath="Name"/>
    <ContentPresenter ContentTemplate="{Binding SelectedItem.Item, ElementName = cmbTemplates}" Content="1234.5"/>
    Et on définit "manuellement" le contenu de la ComboBox :
    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
                List<NamedItem> templates = new List<NamedItem>();
                templates.Add(new NamedItem
                {
                    Name = "Normal",
                    Item = FindResource("tplNormal")
                });
                templates.Add(new NamedItem
                {
                    Name = "Scientific",
                    Item = FindResource("tplScientific")
                });
                templates.Add(new NamedItem
                {
                    Name = "Binary",
                    Item = FindResource("tplBinary")
                });
                templates.Add(new NamedItem
                {
                    Name = "Hexadecimal",
                    Item = FindResource("tplHexadecimal")
                });
                cmbTemplates.ItemsSource = templates;
                cmbTemplates.SelectedIndex = 0;

    Testé et validé

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Non, c'est pas à la combo qu'il faut l'appliquer, mais à un ContentPresenter (via la propriété ContentTemplateSelector). A la place de la TextBox, tu mets un ContentPresenter, et tu définis autant de DataTemplates qu'il y a de formats d'affichage.
    En fait, c'est sur les ContentControl que l'on peut utiliser la propriété ContentTemplateSelector. Si on prent un ContentControl/ContentPresenter, cela peut effectivement fonctionner mais dans ce cas, il faudra redéfinir son Template pour le faire coïncider avec celui de la TextBox... Certes, cela peut fonctionner mais c'est un peu réinventer la roue...

    EDIT: En fait, y a un moyen encore mieux, sans DataTemplateSelector : mettre la liste des DataTemplates directement dans la combobox, et binder le ContentTemplate du ContentPresenter directement sur le SelectedItem.
    Bonne idée dis donc

  7. #7
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Je teste ça de suite, merci !

  8. #8
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Ca fonctionne effectivement.
    Il ne me reste plus qu'à créer les templates pour pouvoir réaliser mes conversions et le tour sera joué...

    D'ailleurs, une idée sur la manière de convertir une valeur en binaire, hexa et autre formats mathématiques ? (je ne suis pas encore très familier avec le framework .Net)

  9. #9
    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
    Citation Envoyé par seiryujay Voir le message
    D'ailleurs, une idée sur la manière de convertir une valeur en binaire, hexa et autre formats mathématiques ? (je ne suis pas encore très familier avec le framework .Net)
    Pour l'hexa tu peux utiliser x.ToString("X")
    Pour la notation scientifique : x.ToString("E")

    Tous les formats disponibles :
    http://msdn.microsoft.com/fr-fr/library/dwhawy9k.aspx

    Pour faire la conversion dans l'autre sens, utilise la méthode TryParse

  10. #10
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Nickel !
    C'est exactement le type de doc que je cherchais.

    Merci pour tout !

  11. #11
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Et y'a pas un truc automatique pour la conversion en binaire ?

    [EDIT] J'ai trouvé, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Convert.ToString(myIntValue, 2);

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

Discussions similaires

  1. affichage des données provenant d'un web service soap dans une listview
    Par nagca dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 04/07/2011, 17h11
  2. Réponses: 0
    Dernier message: 14/11/2010, 13h14
  3. Réponses: 1
    Dernier message: 06/03/2010, 01h11
  4. Réponses: 4
    Dernier message: 12/12/2008, 07h28
  5. Réponses: 3
    Dernier message: 19/12/2005, 13h51

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