J'ai cherché et essayé différentes solutions mais jusqu'à présent aucun d'entre eux ne résout mon problème. J'utilise le DataGrid intégré de WPF dans Visual Studio 2010/.NET4 pour afficher des données à partir d'un document XML stocké en tant que XDocument.Comment lier xml au DataGrid WPF correctement?
Mon code fonctionne bien, et j'ai vérifié que XDocument est présent et correct. Le DataGrid n'affiche cependant aucune donnée.
Le XML ressemble à ceci (simplifié pour plus de clarté):
<data>
<track>
<id>211</id>
<name>Track Name</name>
<duration>156</duration>
<artist_id>13</artist_id>
<artist_name>Artist Name</artist_name>
<album_id>29</album_id>
<album_name>Album Name</album_name>
</track>
...
</data>
Mon XAML ressemble à ceci:
<DataGrid x:Name="LibraryView" Grid.Row="1"
DataContext="{Binding Path=TrackList}" ItemsSource="{Binding XPath=/data/track}">
<DataGridTextColumn Header="Title" Binding="{Binding XPath=name}"/>
<DataGridTextColumn Header="Artist" Binding="{Binding XPath=artist_name}"/>
<DataGridTextColumn Header="Album" Binding="{Binding XPath=album_name}"/>
<DataGridTextColumn Header="Length" Binding="{Binding XPath=duration}"/>
</DataGrid>
Le C# qu'il sauvegarde attribue juste un nouveau XDocument (téléchargé à partir d'un service Web) à la propriété TrackList (qui implémente INotifyPropertyChanged). Aucun traitement supplémentaire n'est effectué à ce sujet. J'ai déjà essayé d'utiliser XLinq pour lier un résultat de requête qui ne fonctionnait pas non plus (même problème), donc j'ai pensé essayer l'approche XPath pour éviter d'écrire une instruction Linq potentiellement buggée, et essayer pour trouver le problème.
Je n'ai plus d'idées pour afficher correctement le DataGrid. Ma compréhension de la façon dont cela est censé fonctionner est clairement absente, alors j'apprécierais grandement toute aide offerte. Editer: Il est intéressant de noter que j'ai une certaine flexibilité avec le format de données d'entrée, car je télécharge moi-même du XML brut. Je vais essayer quelques-unes des suggestions et voir ce que je peux faire pour travailler.
Cela déclenche une InvalidOperationException avec le message suivant: "La collection Items doit être vide avant d'utiliser ItemsSource, ce qui se produit lors de l'assignation à DataContext ou dans le gestionnaire d'événements pour PropertyChanged, donc empêche l'implémentation" Edit: No it doesn ' t, j'ai oublié d'ajouter autour de mes définitions de colonne –
IanGilham
L'exception a été mon erreur.Cela fonctionne bien – IanGilham
Oh man, le débogage xaml peut être odieux. – Natxo