Postupy: Připojení k XDocument, XElement nebo LINQ pro výsledky XML dotazu

Tento příklad ukazuje, jak svázat data XML s ItemsControl použitím XDocument.

Příklad

Následující kód XAML definuje ItemsControl a obsahuje šablonu dat pro data typu Planet v http://planetsNS oboru názvů XML. Datový typ XML, který zabírá obor názvů, musí obsahovat obor názvů ve složených závorkách a pokud se zobrazí, kde by se mohlo objevit rozšíření značek XAML, musí před obor názvů obsahovat řídicí sekvenci složené závorky. Tento kód vytvoří vazbu na dynamické vlastnosti, které odpovídají Element a Attribute metodám XElement třídy. Dynamické vlastnosti umožňují XAML vytvořit vazbu na dynamické vlastnosti, které sdílejí názvy metod. Další informace najdete v tématu Dynamické vlastnosti LINQ to XML. Všimněte si, že výchozí deklarace oboru názvů xml se nevztahuje na názvy atributů.

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

Následující volání Load kódu jazyka C# a nastaví kontext dat panelu zásobníku na všechny dílčí prvky elementu pojmenovaného SolarSystemPlanets v http://planetsNS oboru názvů 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()

Data XML mohou být uložena jako prostředek XAML pomocí ObjectDataProvider. Úplný příklad najdete ve zdrojovém kódu L2DBForm.xaml. Následující ukázka ukazuje, jak kód může nastavit kontext dat na prostředek objektu.

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

Dynamické vlastnosti, které se mapuje a ElementAttribute poskytují flexibilitu v rámci XAML. Váš kód může také svázat s výsledky dotazu LINQ for XML. Tento příklad vytvoří vazbu na výsledky dotazu seřazené podle hodnoty elementu.

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

Viz také