Gewusst wie: Binden an XDocument, XElement oder LINQ für XML-Abfrageergebnisse
Aktualisiert: Juli 2008
In diesem Beispiel wird veranschaulicht, wie XML-Daten mit XDocument an ein ItemsControl gebunden werden.
Beispiel
Der folgende XAML-Code definiert ein ItemsControl und schließt eine Datenvorlage für Daten vom Typ Planet in den XML-Namespace http://planetsNS ein. Ein XML-Datentyp, der in einem Namespace definiert ist, muss den Namespace in geschweiften Klammern enthalten. An einer Position, an der XAML-Markuperweiterungen auftreten können, muss dem Namespace eine Escapesequenz mit geschweiften Klammern vorangestellt werden. Dieser Code wird an dynamische Eigenschaften gebunden, die der Element-Methode und der Attribute-Methode der XElement-Klasse entsprechen. Dynamische Eigenschaften ermöglichen die Bindung von XAML an dynamische Eigenschaften, die die Namen von Methoden gemeinsam verwenden. Weitere Informationen dazu finden Sie unter Dynamische Eigenschaften in LINQ to XML. Beachten Sie, dass die XML-Standardnamespacedeklaration nicht für Attributnamen gilt.
<StackPanel Name="stacky">
<StackPanel.Resources>
<DataTemplate DataType="{}{http://planetsNS}Planet" >
<StackPanel Orientation="Horizontal">
<TextBlock Width="100" Text="{Binding Path=Element[{http://planetsNS}DiameterKM].Value}" />
<TextBlock Width="100" Text="{Binding Path=Attribute[Name].Value}" />
<TextBlock Text="{Binding Path=Element[{http://planetsNS}Details].Value}" />
</StackPanel>
</DataTemplate>
</StackPanel.Resources>
...
<ItemsControl
ItemsSource="{Binding }" >
</ItemsControl>
</StackPanel>
Der folgende C#-Code ruft Load auf und legt den StackPanel-Datenkontext auf alle Unterelemente des Elements mit dem Namen SolarSystemPlanets im XML-Namespace http://planetsNS fest.
planetsDoc = XDocument.Load("../../Planets.xml");
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();
XML-Daten können mit ObjectDataProvider als XAML-Ressource gespeichert werden. Ein vollständiges Beispiel finden Sie unter Quellcode in der Datei 'L2DBForm.xaml'. Im folgenden Beispiel wird gezeigt, wie der Datenkontext in Code auf eine Objektressource festgelegt werden kann.
planetsDoc = (XDocument)((ObjectDataProvider)Resources["justTwoPlanets"]).Data;
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();
Die dynamischen Eigenschaften, die Element und Attribute zugeordnet sind, stellen Flexibilität innerhalb von XAML bereit. Der Code kann auch an die Ergebnisse einer LINQ für XML-Abfrage gebunden werden. In diesem Beispiel erfolgt die Bindung an die nach einem Elementwert sortierten Abfrageergebnisse.
stacky.DataContext =
from c in planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
orderby Int32.Parse(c.Element("{http://planetsNS}DiameterKM").Value)
select c;
Siehe auch
Aufgaben
Beispiel zur LINQ to XML-Datenbindung
Konzepte
Übersicht über Bindungsquellen
Übersicht über die WPF-Datenbindung mit LINQ to XML
Beispiel für die WPF-Datenbindung mit LINQ to XML
Dynamische Eigenschaften in LINQ to XML
Änderungsprotokoll
Datum |
Versionsgeschichte |
Grund |
---|---|---|
Juli 2008 |
Thema hinzugefügt. |
Informationsergänzung. |