Partilhar via


Como: BIND a XDocument, XElement ou LINQ para XML resultados da consulta

Este exemplo demonstra como BIND dados XML a um ItemsControl usando o XDocument.

Exemplo

O seguinte código XAML define um ItemsControl e inclui um modelo de dados do tipo de dados Planet no http://planetsNS namespace de 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 sequência de escape de chave. Esse código vincula a propriedades dinâmicas que correspondem à Element e Attribute métodos para o XElement classe. Propriedades dinâmicas permitem XAML BIND a propriedades dinâmicas que compartilham os nomes dos métodos. Para saber mais, consulte LINQ to XML Dynamic Properties. Observe como a declaração de namespace padrão para o XML não se aplica a 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>

O seguinte código de translation from VPE for Csharp chama Load e conjuntos de pilha de contexto de dados para todos os subelementos do elemento denominado do painel SolarSystemPlanets no http://planetsNS namespace de XML.

planetsDoc = XDocument.Load("../../Planets.xml");
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();

Dados XML podem ser armazenados sistema autônomo 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 conjunto o contexto de dados para um recurso do objeto.

planetsDoc = (XDocument)((ObjectDataProvider)Resources["justTwoPlanets"]).Data;
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();

As propriedades dinâmicas que mapeiam para Element e Attribute fornece flexibilidade dentro do XAML. Seu código também pode BIND os resultados de uma consulta XML do LINQ. Este exemplo vincula aos resultados de consulta ordenados por um valor do elemento.

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

Tarefas

LINQ para XML exemplo de ligação de dados

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

Date

History

Motivo

Julho de 2008

Tópico adicional.

Aprimoramento de informações.