SL3 Binding entre Listbox et requête Linq
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
Code:
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> |
XAML
Code:
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> |
C# (j'utilise des variables inutiles pour pouvoir voir le contenu en mode debuggage)
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).
Code:
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;
} |
Ca ne fonctionne pas.
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
Code:
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";
} |
Sans plus de succès.
themes contient bien des "MonEspaceDeNom.Theme" correctement renseignés, mais rien ne s'affiche dans la liste.
Mon seul succès a été :
Code:
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;
} |
Si quelqu'un peu me donner un coup de main ... se serait super sympa.