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.