Procedura: eseguire l'associazione ai risultati di una query XDocument, XElement o LINQ to XMLHow to: Bind to XDocument, XElement, or LINQ for XML Query Results

In questo esempio viene illustrato come associare i dati XML da un ItemsControl utilizzando XDocument.This example demonstrates how to bind XML data to an ItemsControl using XDocument.

EsempioExample

Il codice XAML seguente definisce un ItemsControl e include un modello di dati di tipo Planet nel http://planetsNS spazio dei nomi XML.The following XAML code defines an ItemsControl and includes a data template for data of type Planet in the http://planetsNS XML namespace. 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.An XML data type that occupies a namespace must include the namespace in braces, and if it appears where a XAML markup extension could appear, it must precede the namespace with a brace escape sequence. Questo codice associa a proprietà dinamiche che corrispondono al Element e Attribute metodi di XElement classe.This code binds to dynamic properties that correspond to the Element and Attribute methods of the XElement class. Le proprietà dinamiche consentono al codice XAML di eseguire un'associazione a proprietà dinamiche che condividono i nomi dei metodi.Dynamic properties enable XAML to bind to dynamic properties that share the names of methods. Per altre informazioni, vedere Proprietà dinamiche di LINQ to XML.To learn more, see LINQ to XML Dynamic Properties. Si noti che la dichiarazione predefinita dello spazio dei nomi per il codice XML non viene applicata ai nomi di attributo.Notice how the default namespace declaration for the XML does not apply to attribute names.

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

L'esempio di codice c# chiama Load e imposta il contesto di dati del pannello stack su tutti i sottoelementi dell'elemento denominato SolarSystemPlanets nel http://planetsNS spazio dei nomi XML.The following C# code calls Load and sets the stack panel data context to all subelements of the element named SolarSystemPlanets in the http://planetsNS XML namespace.

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

Dati XML possono essere archiviati come risorsa XAML mediante ObjectDataProvider.XML data can be stored as a XAML resource using ObjectDataProvider. Per un esempio completo, vedere Codice sorgente di L2DBForm.xaml.For a complete example, see L2DBForm.xaml Source Code. L'esempio seguente illustra come il codice può impostare il contesto dei dati per una risorsa oggetto.The following sample shows how code can set the data context to an object resource.

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 flessibilità all'interno di XAML.The dynamic properties that map to Element and Attribute provide flexibility within XAML. Il codice può anche eseguire l'associazione ai risultati di una query LINQ to XML.Your code can also bind to the results of a LINQ for XML query. Questo esempio esegue l'associazione ai risultati di una query ordinati in base al valore di un elemento.This example binds to query results ordered by an element value.

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

Vedere ancheSee Also

Panoramica delle origini di associazioneBinding Sources Overview
Panoramica dei data binding WPF con LINQ to XMLWPF Data Binding with LINQ to XML Overview
Esempio di data binding WPF tramite LINQ to XMLWPF Data Binding Using LINQ to XML Example
Proprietà dinamiche in LINQ to XMLLINQ to XML Dynamic Properties