HOW TO:繫結至 XML 查詢結果的 XDocument、XElement 或 LINQ
更新: 2008 年 7 月
在下列範例中,會示範如何使用 XDocument 將 XML 資料繫結至 ItemsControl。
範例
下列 XAML 程式碼會定義 ItemsControl,並將 Planet 型別之資料的資料樣板 (Template) 包含在 http://planetsNS XML 命名空間 (Namespace) 中。佔用命名空間的 XML 資料型別必須將命名空間包含在括號內,而且如果此型別出現 XAML 標記延伸可能出現的位置,則它必須在命名空間前面加上括號逸出序列 (Escape Sequence)。這個程式碼會繫結至與 XElement 類別 (Class) 的 Element 和 Attribute 方法對應的動態屬性。動態屬性 (Property) 能讓 XAML 繫結至共用方法名稱的動態屬性 (Property)。若要了解詳細資訊,請參閱 LINQ to XML 動態屬性。請注意 XML 的預設命名空間宣告不適用於屬性 (Attribute) 名稱的方式。
<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();
使用 ObjectDataProvider 可以將 XML 資料儲存成 XAML 資源。如需完整的範例,請參閱 L2DBForm.xaml 原始程式碼。在下列範例中,會示範程式碼如何將資料內容設定為物件資源。
planetsDoc = (XDocument)((ObjectDataProvider)Resources["justTwoPlanets"]).Data;
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;
請參閱
工作
概念
變更記錄
日期 |
記錄 |
原因 |
---|---|---|
2008 年 7 月 |
加入主題。 |
資訊加強。 |