Cómo: Enlazar a los resultados de una consulta LINQ for XML, XDocument o XElement
Actualización: Julio de 2008
En este ejemplo se muestra cómo enlazar datos XML a un elemento ItemsControl mediante XDocument.
Ejemplo
El código XAML siguiente define un elemento ItemsControl e incluye una plantilla de datos para los datos de tipo Planet en el espacio de nombres XML http://planetsNS. Un tipo de datos XML que ocupa un espacio de nombres debe incluir el espacio de nombres entre llaves y, si aparece donde podría aparecer una extensión de marcado XAML, debe preceder al espacio de nombres con una secuencia de escape de llaves. Este código enlaza a las propiedades dinámicas que corresponden a los métodos Element y Attribute de la clase XElement. Las propiedades dinámicas permiten a XAML enlazar a las propiedades dinámicas que comparten los nombres de los métodos. Para obtener más información, vea Propiedades dinámicas de LINQ to XML. Tenga en cuenta cómo la declaración de espacio de nombres predeterminada para XML no se aplica a los nombres 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>
El código de C# siguiente llama a Load y establece el contexto de datos del panel de pila en todos los subelementos del elemento denominado SolarSystemPlanets en el espacio de nombres XML http://planetsNS.
planetsDoc = XDocument.Load("../../Planets.xml");
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();
Los datos XML pueden almacenarse como recurso XAML mediante ObjectDataProvider. Para obtener un ejemplo completo, vea Código de origen de L2DBForm.xaml. En el ejemplo siguiente se muestra cómo el código puede establecer el contexto de datos en un recurso de objetos.
planetsDoc = (XDocument)((ObjectDataProvider)Resources["justTwoPlanets"]).Data;
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();
Las propiedades dinámicas que se asignan a Element y Attribute proporcionan flexibilidad dentro de XAML. Su código también puede enlazar a los resultados de una consulta LINQ for XML. Este ejemplo enlaza a los resultados de la consulta ordenados por un 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;
Vea también
Tareas
Ejemplo LINQ to XML Databinding
Conceptos
Información general sobre orígenes de enlaces
Información general sobre el enlace de datos de WPF con LINQ to XML
Ejemplo de enlace de datos de WPF con LINQ to XML
Propiedades dinámicas de LINQ to XML
Historial de cambios
Fecha |
Historial |
Motivo |
---|---|---|
Julio de 2008 |
Se ha agregado un tema. |
Mejora de la información. |