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 listbox avec datatemplate et récupération de valeur


Sujet :

Windows Presentation Foundation

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 64
    Points : 66
    Points
    66
    Par défaut Binding listbox avec datatemplate et récupération de valeur
    Bonjour, ca fait quelques jours que je joue avec wpf mais là je bloque et je n’ai pas trouvé de solution sur internet :

    j'ai suivi un tutoriel pour récupérer des valeurs dans un fichier xml.
    J'utilise donc linq to xml pour peupler une listbox.

    J'ai créé un datatemplate pour la listbox ou j'affiche un textblock et une image.

    Ce que je voudrai c'est que quand je clic sur un élément de la listbox, la selectedvalue soit égale à ce qu'il y a écrit dans le textblock.

    Voici ce que j'utilise :

    La classe pour récupérer les données:

    Code : 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
    37
     
    class Populous
        {
            public static List<xmlData> LoadPopulous()
            {
                MyClass myPath = new MyClass();
     
     
                List<xmlData> ListRecords = new List<xmlData>();
     
     
                XDocument takeToDo = XDocument.Load(myPath.MyRessourcePath());
     
                var myToDo = from todo in takeToDo.Descendants("todo")
                             orderby DateTime.Parse(todo.Attribute("date").Value) descending
                             select new
                             {
                                 Nom = todo.Attribute("nom").Value,
                                 Date = todo.Attribute("date").Value,
                                 Prioirte = todo.Attribute("priorite").Value,
                                 Img = todo.Attribute("image").Value,
                                 Message = todo.Attribute("message").Value
                             };
                foreach (var getTodo in myToDo)
                {
                    xmlData newToDo = new xmlData
                    {
                    Nom = getTodo.Nom,
                    Image = getTodo.Img,
                    Message = getTodo.Message
                    };
     
                ListRecords.Add(newToDo);
                }
                return ListRecords;
            }
        }
    le code sur le page_loaded pour charger la liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    List<xmlData> myToDo = new List<xmlData>();
                myToDo = Populous.LoadPopulous();
                listTodo.DataContext = myToDo;
    Et enfin le xaml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <ListBox ItemsSource="{Binding}" x:Name="listTodo" IsSynchronizedWithCurrentItem="True">
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal">
                                        <Image Source="{Binding Path=Image}" />
                                        <TextBlock Text="{Binding Path=Nom}" />
                                    </StackPanel>
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>
    Avec le code ci-dessus, la selectedvalue de tous les éléments est égale à :
    OTO4.xmlData (OTO4 étant le nom de mon application).
    Mes connaissances en C# ne sont pas extraordinaire, n'y allez pas trop fort s'il vous plait ^^.

    Merci d'avance.

  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
    Il faudrait préciser le SelectedValuePath :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <ListBox ItemsSource="{Binding}"
             x:Name="listTodo"
             SelectedValuePath="Nom"
             IsSynchronizedWithCurrentItem="True">

    Mais en fait tu n'as pas vraiment besoin d'utiliser SelectedValue : avec le binding, tu peux récupérer n'importe quelle propriété du SelectedItem, ce qui est généralement plus pratique...

  3. #3
    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
    Avec le code ci-dessus, la selectedvalue de tous les éléments est égale à
    C'est normal car avec la façon dont tu as mis en place le binding (qui est correct, rassures toi), à chaque élément sélectionné, tu récèpères l'instance de l'objet bindé. Donc, tu peux sois passé par la propriété SelectedValuePath soit utilisé drectement l'instance de l'objet sur lequel tu est bindé: tonObjet.Nom

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 64
    Points : 66
    Points
    66
    Par défaut
    Le selectedvaluepath fonctionne bien et pour l'instant ca marche avec tout ce que j'ai fait ^^.

    Merci beaucoup.

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

Discussions similaires

  1. Binding Listbox avec image
    Par Leonsch dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 24/12/2009, 11h12
  2. Réponses: 5
    Dernier message: 09/12/2009, 14h39
  3. Réponses: 19
    Dernier message: 07/06/2006, 08h06
  4. Réponses: 8
    Dernier message: 09/03/2005, 10h47

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