共用方式為


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) 的 ElementAttribute 方法對應的動態屬性。動態屬性 (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();

ElementAttribute 對應的動態屬性提供了 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;

請參閱

工作

LINQ to XML 資料繫結範例

概念

繫結來源概觀

使用 LINQ to XML 進行 WPF 資料繫結概觀

使用 LINQ to XML 進行 WPF 資料繫結範例

LINQ to XML 動態屬性

變更記錄

日期

記錄

原因

2008 年 7 月

加入主題。

資訊加強。