共用方式為


HOW TO:繫結至 XML 查詢結果的 XDocument、XElement 或 LINQ

在下列範例中,會示範如何使用 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()
planetsDoc = XDocument.Load("../../Planets.xml");
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();

使用 ObjectDataProvider 可以將 XML 資料儲存成 XAML 資源。 如需完整的範例,請參閱 L2DBForm.xaml 原始程式碼。 在下列範例中,會示範程式碼如何將資料內容設定為物件資源。

            planetsDoc = CType((CType(Resources("justTwoPlanets"), ObjectDataProvider)).Data, XDocument)
            stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
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()
                                 Order By Int32.Parse(c.Element("{http://planetsNS}DiameterKM").Value)
                                 Select c
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 進行 WPF 資料繫結概觀

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

LINQ to XML 動態屬性