Procedura: eseguire l'associazione ai risultati di una query XDocument, XElement o LINQ to XML
In questo esempio viene illustrato come associare dati XML a un ItemsControl oggetto utilizzando XDocument.
Esempio
Il codice XAML seguente definisce un ItemsControl oggetto e include un modello di dati per i dati di tipo Planet
nello spazio dei http://planetsNS
nomi XML. Un tipo di dati XML che occupa uno spazio dei nomi deve includere lo spazio dei nomi tra parentesi graffe e, se viene visualizzato dove viene visualizzata un'estensione di markup XAML, deve precedere lo spazio dei nomi con una sequenza di escape in parentesi graffe. Questo codice viene associato a proprietà dinamiche che corrispondono ai Element metodi e Attribute della XElement classe . Le proprietà dinamiche consentono al codice XAML di eseguire un'associazione a proprietà dinamiche che condividono i nomi dei metodi. Per altre informazioni, vedere Proprietà dinamiche LINQ to XML. Si noti che la dichiarazione predefinita dello spazio dei nomi per il codice XML non viene applicata ai nomi di attributo.
<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 Load e imposta il contesto dei dati del pannello dello stack su tutti i sottoelementi dell'elemento denominato SolarSystemPlanets
nello spazio dei http://planetsNS
nomi XML.
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 usando ObjectDataProvider. Per un esempio completo, vedi Codice sorgente L2DBForm.xaml. L'esempio seguente illustra come il codice può impostare il contesto dei dati per una risorsa oggetto.
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()
Le proprietà dinamiche che eseguono il mapping a Element e Attribute offrono flessibilità all'interno di XAML. Il codice può anche eseguire l'associazione ai risultati di una query LINQ to XML. Questo esempio esegue l'associazione ai risultati di una query ordinati in base al valore di un elemento.
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
Vedi anche
.NET Desktop feedback