Instrukcje: wiązanie z elementami XDocument, XElement lub LINQ dla wyników zapytania XML
W tym przykładzie pokazano, jak powiązać dane XML z ItemsControl przy użyciu XDocument.
Przykład
Poniższy kod XAML definiuje ItemsControl i zawiera szablon danych dla danych typu Planet
w przestrzeni nazw http://planetsNS
XML. Typ danych XML, który zajmuje przestrzeń nazw, musi zawierać tę przestrzeń w nawiasach klamrowych, a jeśli znajduje się w miejscu, gdzie mogłoby pojawić się rozszerzenie znacznika XAML, musi poprzedzać przestrzeń nazw sekwencją ucieczki z nawiasu klamrowego. Ten kod wiąże się z właściwościami dynamicznymi odpowiadającymi metodom Element i Attribute klasy XElement. Właściwości dynamiczne umożliwiają kodowi XAML powiązanie z właściwościami dynamicznymi, które współdzielą nazwy metod. Aby dowiedzieć się więcej, zobacz LINQ to XML dynamic properties. Zwróć uwagę, że domyślna deklaracja przestrzeni nazw XML nie ma zastosowania do nazw atrybutów.
<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>
Poniższy kod języka C# wywołuje Load i ustawia kontekst danych panelu stosu na wszystkie podelementy elementu o nazwie SolarSystemPlanets
w przestrzeni nazw http://planetsNS
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()
Dane XML mogą być przechowywane jako zasób XAML przy użyciu ObjectDataProvider. Aby zapoznać się z kompletnym przykładem, sprawdź kod źródłowy L2DBForm.xaml. Poniższy przykład pokazuje, jak kod może ustawić kontekst danych dla zasobu obiektu.
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()
Właściwości dynamiczne mapujące na Element i Attribute zapewniają elastyczność w języku XAML. Kod może być również powiązany z wynikami zapytania LINQ for XML. Ten przykład wiąże się z wynikami zapytania uporządkowanymi według wartości 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
Zobacz też
.NET Desktop feedback