Compartilhar via


Como: Vincular XDocument, XElement ou LINQ para XML resultados de consulta

Este exemplo demonstra como vincular dados XML para um ItemsControl usando XDocument.

Exemplo

O seguinte código XAML define uma ItemsControl e inclui um modelo de dados para o tipo de dados Planet na http://planetsNS namespace em XML. Um tipo de dados XML que ocupa um espaço para nome deve incluir o espaço para nome chaves e se ele aparecer onde uma extensão de marcação XAML poderia aparecer, ela deve preceder o namespace com uma seqüência de escape de chave. Esse código vincula a propriedades dinâmicas que correspondem a Element e Attribute métodos da XElement classe. Propriedades dinâmicas permitem XAML para ligar a propriedades dinâmicas que compartilham os nomes dos métodos. To learn more, see LINQ to XML Dynamic Properties. Observe como a declaração de namespace padrão para o XML não se aplica aos nomes de atributo.

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

As seguintes chamadas de código em C# Load e define o contexto de dados do painel de pilha para todos os subelementos do elemento denominado SolarSystemPlanets na http://planetsNS namespace em 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();

Dados XML podem ser armazenados como um recurso XAML usando ObjectDataProvider. Para obter um exemplo completo, consulte L2DBForm.xaml Source Code. O exemplo a seguir mostra como o código pode definir o contexto de dados para um recurso de objeto.

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

As propriedades dinâmicas que mapeiam para Element e Attribute fornecer flexibilidade dentro do XAML. Seu código também pode vincular aos resultados de uma consulta XML do LINQ. Este exemplo vincula a resultados de consulta, ordenados por um valor de 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;

Consulte também

Conceitos

Visão geral sobre associação de fontes

WPF Data Binding with LINQ to XML Overview

WPF Data Binding Using LINQ to XML Example

LINQ to XML Dynamic Properties