Procedura: eseguire l'associazione ai risultati di una query XDocument, XElement o LINQ to XML
In questo esempio viene illustrato come eseguire l'associazione dei dati XML a un oggetto ItemsControl mediante XDocument.
Esempio
Il codice XAML seguente definisce un oggetto ItemsControl e include un modello di dati di tipo Planet nello spazio dei nomi XML http://planetsNS. Un tipo di dati XML che occupa uno spazio dei nomi deve includere lo spazio dei nomi tra parentesi graffe e se risiede dove può essere presente un'estensione di markup XAML, è necessario anteporre allo spazio dei nomi una sequenza di escape tra parentesi graffe. Questo codice esegue l'associazione a proprietà dinamiche che corrispondono ai metodi Element e Attribute della classe XElement. Le proprietà dinamiche consentono al codice XAML di eseguire l'associazione a proprietà dinamiche che condividono i nomi dei metodi. Per ulteriori informazioni, vedere Proprietà dinamiche di LINQ to XML. La dichiarazione dello spazio dei nomi predefinita per XML non viene applicata ai nomi degli attributi.
<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>
Il codice C# seguente chiama il metodo Load e imposta il contesto dati del pannello stack su tutti i sottoelementi dell'elemento denominato SolarSystemPlanets nello spazio dei nomi 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();
I dati XML possono essere archiviati come risorsa XAML mediante ObjectDataProvider. Per un esempio completo, vedere Codice sorgente di L2DBForm.xaml. Nell'esempio seguente viene illustrato come il codice può impostare il contesto dati su una risorsa dell'oggetto.
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();
Le proprietà dinamiche che eseguono il mapping a Element e Attribute forniscono la flessibilità all'interno di XAML. Il codice può inoltre eseguire l'associazione ai risultati di una query LINQ to XML. In questo esempio viene eseguita l'associazione ai risultati della query ordinati in base al valore di un elemento.
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;
Vedere anche
Concetti
Cenni preliminari sulle origini di associazione
Cenni preliminari sull'associazione dati WPF con LINQ to XML