Procédure : lier à XDocument, XElement ou LINQ pour les résultats de requête XML
Cet exemple montre comment lier des données XML à un ItemsControl à l’aide de 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 dans les accolades ({}), et s’il se situe à un endroit où une extension de balisage XAML pourrait apparaître, elle doit être précédée d'une séquence d'échappement avec accolade. Ce code est lié aux propriétés dynamiques qui correspondent aux méthodes Element et Attribute de la classe XElement. Les propriétés dynamiques permettent à XAML de se lier à des propriétés dynamiques qui partagent les noms des méthodes. Pour plus d’informations, consultez les propriétés dynamiques de "LINQ to XML". Notez comment la déclaration d’espace de noms par défaut pour le code XML ne s’applique pas aux noms d’attributs.
<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 de données du panneau de pile sur 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 en tant que ressource XAML à l’aide de 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 = (XDocument)((ObjectDataProvider)Resources["justTwoPlanets"]).Data;
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();
planetsDoc = CType((CType(Resources("justTwoPlanets"), ObjectDataProvider)).Data, XDocument)
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
Les propriétés dynamiques qui mappent à Element et Attribute offrent une flexibilité au sein de XAML. Votre code peut également être lié aux résultats d’une requête LINQ pour XML. Cet exemple lie les résultats de requête classés par une valeur d’élément.
stacky.DataContext =
from c in planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
orderby Int32.Parse(c.Element("{http://planetsNS}DiameterKM").Value)
select c;
stacky.DataContext = From c In planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
Order By Int32.Parse(c.Element("{http://planetsNS}DiameterKM").Value)
Select c
Voir aussi
- Vue d’ensemble des sources de liaison
- Liaison de données WPF avec un aperçu de LINQ to XML
- liaison de données WPF à l’aide de l’exemple LINQ to XML
- Propriétés dynamiques de LINQ to XML
.NET Desktop feedback