Share via


Comment : effectuer une liaison avec XDocument, XElement ou LINQ pour des résultats de requête XML

Cet exemple montre comment lier des données XML à un ItemsControl au moyen d'un XDocument.

Exemple

Le code XAML suivant définit un ItemsControl et inclut un modèle de données pour les données de type Planet dans l'espace de noms XML http://planetsNS. Un type de données XML qui occupe un espace de noms doit inclure l'espace de noms entre accolades et s'il apparaît là où une extension de balisage XAML pourrait apparaître, il doit précéder l'espace de noms avec une séquence d'échappement d'accolade. Ce code effectue une liaison aux propriétés dynamiques qui correspondent aux méthodes Element et Attribute de la classe XElement. Les propriétés dynamiques permettent au XAML de créer une liaison avec les propriétés dynamiques qui partagent les noms de méthodes. Pour en savoir plus, consultez Propriétés dynamiques de LINQ to XML. Notez la manière dont la déclaration d'espace de noms par défaut pour le XML ne s'applique pas aux noms d'attribut.

<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>

Le code C# suivant appelle Load et définit le contexte des données du panneau d’empilement à tous les sous-éléments de l'élément nommé SolarSystemPlanets dans l'espace de noms XML http://planetsNS.

            planetsDoc = XDocument.Load("../../Planets.xml")
            stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
planetsDoc = XDocument.Load("../../Planets.xml");
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();

Les données XML peuvent être stockées comme une ressource XAML en utilisant ObjectDataProvider. Pour obtenir un exemple complet, consultez Code source L2DBForm.xaml. L'exemple suivant montre comment le code peut définir le contexte de données sur une ressource d'objet.

            planetsDoc = CType((CType(Resources("justTwoPlanets"), ObjectDataProvider)).Data, XDocument)
            stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
planetsDoc = (XDocument)((ObjectDataProvider)Resources["justTwoPlanets"]).Data;
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();

Les propriétés dynamiques qui effectuent un mappage vers Element et Attribute fournissent une grande souplesse au XAML. Votre code peut également créer une liaison avec les résultats d'une requête LINQ pour XML. Cet exemple crée une liaison avec les résultats de la requête classés par une valeur d'élément.

            stacky.DataContext = From c In planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
                                 Order By Int32.Parse(c.Element("{http://planetsNS}DiameterKM").Value)
                                 Select c
stacky.DataContext =
from c in planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
orderby Int32.Parse(c.Element("{http://planetsNS}DiameterKM").Value)
select c;

Voir aussi

Concepts

Vue d'ensemble des sources de liaison

Vue d'ensemble de la liaison de données WPF avec LINQ to XML

Exemple de liaison de données WPF à l'aide de LINQ to XML

Propriétés dynamiques de LINQ to XML