Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este exemplo demonstra como associar dados XML a um ItemsControl uso XDocument.
Exemplo
O código XAML a seguir define um ItemsControl e inclui um modelo de dados para dados do tipo Planet
no namespace XML http://planetsNS
. Um tipo de dado XML que ocupa um namespace deve incluir o namespace entre chaves e, caso ele apareça onde uma extensão de marcação XAML poderia estar, deve preceder o namespace com uma sequência de escape de chave. Esse código associa-se a propriedades dinâmicas que correspondem aos métodos Element e Attribute da classe XElement. As propriedades dinâmicas permitem que o XAML se associe a propriedades dinâmicas que compartilham os nomes dos métodos. Para saber mais, confira as propriedades dinâmicas LINQ to XML. 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 C# chama Load e define o contexto de dados do painel de pilha para todos os subelementos do elemento chamado SolarSystemPlanets
no namespace 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()
Os dados XML podem ser armazenados como um recurso XAML usando ObjectDataProvider. Para obter um exemplo completo, consulte o código-fonte L2DBForm.xaml. O exemplo a seguir mostra como o código pode definir o contexto de dados para um recurso de objeto.
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()
As propriedades dinâmicas que mapeiam para Element e Attribute oferecem flexibilidade dentro do XAML. Seu código também pode se associar aos resultados de uma consulta LINQ for XML. Este exemplo associa-se aos resultados da consulta ordenados por um valor de 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
Consulte também
- Visão geral das fontes de vinculação
- Vinculação de dados do WPF com LINQ to XML: uma visão geral
- Exemplo de vínculo de dados WPF usando LINQ to XML
- Propriedades Dinâmicas do LINQ para XML
.NET Desktop feedback