如何:繫結至 XML 查詢結果的 XDocument、XElement 或 LINQ
這個範例示範如何使用 ItemsControl 將 XML 資料繫結至 XDocument。
範例
下列 XAML 程式碼會定義 ItemsControl,並包含 http://planetsNS
XML 命名空間中型別 Planet
資料的資料範本。 佔用命名空間的 XML 資料類型必須將命名空間放在大括號中,而如果它出現在 XAML 標記延伸可能出現的位置,則必須在命名空間前面加上大括號逸出序列。 此程式碼會繫結至對應至 XElement 類別之 Element 和 Attribute 方法的動態屬性。 動態屬性可以讓 XAML 繫結至共用方法名稱的動態屬性。 若要深入了解,請參閱 LINQ to XML 動態屬性。 請注意,XML 的預設命名空間宣告不適用於屬性名稱。
<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>
下列 C# 程式碼會呼叫 Load,並將堆疊面板資料內容設定為 http://planetsNS
XML 命名空間中名為 SolarSystemPlanets
之元素的所有子元素。
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 資料可以使用 ObjectDataProvider 儲存為 XAML 資源。 如需完整的範例,請參閱 L2DBForm.xaml 原始程式碼。 下列範例顯示程式碼如何將資料內容設定為物件資源。
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()
對應至 Element 和 Attribute 的動態屬性在 XAML 內提供彈性。 您的程式碼也可以繫結至 LINQ for XML 查詢的結果。 此範例會繫結至依照元素值排序的查詢結果。
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