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:
le code sur le page_loaded pour charger la liste :
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; } }
Et enfin le xaml :
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;
Avec le code ci-dessus, la selectedvalue de tous les éléments est égale à :
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>
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.
Partager