Wie binden von xml in das WPF-DataGrid-richtig?
Habe ich gesucht und versucht verschiedene Lösungen, aber so weit keines von Ihnen mein problem zu lösen. Ich bin mit dem integrierten DataGrid aus dem WPF in Visual Studio 2010/.NET4 zum anzeigen von Daten aus einem XML-Dokument gespeichert, als ein XDocument.
Mein code läuft wunderbar, und ich habe überprüft, dass die XDocument ist vorhanden und korrekt. Das DataGrid wird keine Daten angezeigt, jedoch.
Die XML sieht so aus (aus Gründen der übersichtlichkeit vereinfacht):
<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>
Meiner XAML-Code sieht wie folgt aus:
<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>
C#, der es sichert nur ordnet eine neue XDocument (Download von einem web-service), um die TrackList Eigenschaft (die INotifyPropertyChanged implementiert). Keine weitere Verarbeitung erfolgt auf es.
Habe ich vorher versucht, mit XLinq, zu binden, um ein Abfrage-Ergebnis, das hat nicht funktioniert (Gleiches problem), so dass ich dachte, ich würde versuchen, die XPath-Ansatz zu vermeiden, schreiben einen potenziell buggy Linq-Anweisung, und versuchen, das problem zu finden.
Ich bin running out of Ideen, wie man den DataGrid korrekt angezeigt wird. Mein Verständnis von, wie das funktionieren soll ist ganz klar fehlt, also ich wäre dankbar jede Hilfe angeboten.
Edit: Es ist erwähnenswert, dass ich eine gewisse Flexibilität bei den Eingangs-Daten-format, so wie ich bin herunterladen von XML-Rohdaten selbst. Ich werde versuchen, einige der Vorschläge und sehen, was ich bekommen kann, um zu arbeiten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich verwendet XLinq und fein gearbeitet, mit ein XElement-statt eines XDocument :
Xaml:
Binding XPath ist nur relevant, wenn Sie die Bindung an etwas, das ist ein XmlNode-Objekte (z.B. Verwendung XmlDataProvider). Sehen hier.
XPath funktioniert nicht mit XDocument-Klassen. Der einzige Weg, um zu binden, um die Eigenschaften eines XDocument ist der normale Pfad-syntax ist nicht XML-fähige.
Ihre beste Wette ist entweder die Verwendung der XmlDataSource, oder konvertieren Sie Ihre Xml-Dokument über XDocument in einem POCO. Das ist ziemlich einfach mit LINQ: