Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här exemplet visar hur du binder XML-data till en ItemsControl med hjälp av XDocument.
Exempel
Följande XAML-kod definierar en ItemsControl och innehåller en datamall för data av typen Planet i http://planetsNS XML-namnområde. XML-datatypen som upptar ett namnområde måste inkludera namnområdet i klammerparenteser, och om det visas där ett XAML-markup-tillägg kan visas, ska det föregås av en escape-sekvens för klammerparenteser. Den här koden binder till dynamiska egenskaper som motsvarar metoderna Element och Attribute i klassen XElement. Med dynamiska egenskaper kan XAML binda till dynamiska egenskaper som delar namnen på metoderna. Mer information finns i dynamiska egenskaper i LINQ till XML. Observera hur standarddeklarationen för namnområdet för XML inte gäller för attributnamn.
<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>
Följande C#-kod anropar Load och anger stackpanelens datakontext till alla underelement i elementet med namnet SolarSystemPlanets i http://planetsNS XML-namnområdet.
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()
XML-data kan lagras som en XAML-resurs med hjälp av ObjectDataProvider. Ett fullständigt exempel finns i L2DBForm.xaml-källkod. Följande exempel visar hur kod kan ange datakontexten till en objektresurs.
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()
De dynamiska egenskaper som mappas till Element och Attribute ger flexibilitet inom XAML. Koden kan också binda till resultatet av en LINQ för XML-fråga. Det här exemplet binder till frågeresultat ordnade efter ett elementvärde.
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
Se även
.NET Desktop feedback