Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este ejemplo se muestra cómo enlazar datos XML a un ItemsControl usando XDocument.
Ejemplo
El siguiente código XAML define un ItemsControl e incluye una plantilla de datos para 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 propiedades dinámicas que corresponden a los métodos Element y Attribute de la clase XElement. Las propiedades dinámicas permiten que XAML se enlace a propiedades dinámicas que comparten los nombres de los métodos. Para más información, consulte Propiedades dinámicas de LINQ to XML. Observe cómo la declaración de espacio de nombres predeterminada para el 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 C# siguiente llama a Load y establece el contexto de datos del stack panel 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();
planetsDoc = XDocument.Load("../../Planets.xml")
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
Los datos XML se pueden almacenar como un recurso XAML mediante ObjectDataProvider. Para obtener un ejemplo completo, consulta Código fuente L2DBForm.xaml. En el ejemplo siguiente se muestra cómo el código puede establecer el contexto de datos en un 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()
Las propiedades dinámicas que se asignan a Element y Attribute proporcionan flexibilidad en XAML. El código también puede enlazarse a los resultados de una consulta LINQ for XML. En este ejemplo se 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;
stacky.DataContext = From c In planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
Order By Int32.Parse(c.Element("{http://planetsNS}DiameterKM").Value)
Select c
Consulte también
.NET Desktop feedback