Bonjour,
Je désire dans une Listbox afficher certains des éléments d'un fichier XML chargé via un WebClient et sur lequel je fait une requête Linq.
Mais je n'arrive pas à faire un bind satisfaisant.
Fichier XML
XAML
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?xml version="1.0" encoding="utf-8" ?> <themes> <theme> <libelle>Démarrage</libelle> <descriptif>introduction</descriptif> <auteur>Alain</auteur> </theme> <theme> <libelle>Leçon 1</libelle> <descriptif>Mise en route</descriptif> <auteur>Pierre</auteur> </theme> </themes>
C# (j'utilise des variables inutiles pour pouvoir voir le contenu en mode debuggage)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <ListBox x:Name="lstThemes" Height="300"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Vertical"> <TextBlock Text="{Binding libelle}"/> <TextBlock Text="{Binding auteur}"/> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
Je passe par un ToList, parce que j'ai vue pal mal d'exemple le faire, mais sans savoir si c'était réellement utile (j'ai bien entendu tenté des assignation directe de mon résultat sans cette transformation).
Ca ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void DlXmlThemeCompleted(object sender, DownloadStringCompletedEventArgs e) { string sThemes = e.Result; XElement xml = XElement.Parse(sThemes); var themes = from t in xml.Descendants("theme") select new { libelle = t.Element("libelle").Value, auteur = t.Element("auteur").Value }; var maliste = themes.ToList(); lstThemes.ItemsSource = maliste; }
En passant la souris, je vois que j'ai 2 items, mais vide de tout contenu.
J'ai supprimer le Listbox.ItemTemplate pour réduire la définition de la ListBox à sa plus simple expression et tenté d'assigner DisplayMemberPath sans succès.
Pensant que le pb venait du type anonyme j'ai essayer des choses du genre
Sans plus de succès.
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 class Theme { public string libelle { get; set; } public string auteur { get; set; } } void DlXmlThemeCompleted(object sender, DownloadStringCompletedEventArgs e) { string sThemes = e.Result; XElement xml = XElement.Parse(sThemes); var themes = from t in xml.Descendants("theme") select new Theme() { libelle = t.Element("libelle").Value, auteur = t.Element("auteur").Value }; var maliste = themes.ToList(); lstThemes.ItemsSource = maliste; lstThemes.DisplayMemberPath = "libelle"; }
themes contient bien des "MonEspaceDeNom.Theme" correctement renseignés, mais rien ne s'affiche dans la liste.
Mon seul succès a été :
Si quelqu'un peu me donner un coup de main ... se serait super sympa.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void DlXmlThemeCompleted(object sender, DownloadStringCompletedEventArgs e) { string sThemes = e.Result; XElement xml = XElement.Parse(sThemes); var themes = from t in xml.Descendants("theme") select t.Element("libelle").Value ; lstThemes.ItemsSource = theme; }
Partager