Share via


如何:繫結至 XML 查詢結果的 XDocument、XElement 或 LINQ

此範例示範如何使用 將 XML 資料系結至 ItemsControlXDocument

範例

下列 XAML 程式碼會 ItemsControl 定義 ,並包含 XML 命名空間中 http://planetsNS 型別 Planet 資料的資料範本。 佔用命名空間的 XML 資料類型必須將命名空間放在大括號中,而如果它出現在 XAML 標記延伸可能出現的位置,則必須在命名空間前面加上大括號逸出序列。 此程式碼會系結至對應至 類別之 ElementAttribute 方法的 XElement 動態屬性。 動態屬性可以讓 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 ,並將堆疊面板資料內容設定為 XML 命名空間中 http://planetsNS 名為 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 資料可以使用 儲存為 XAML 資源 ObjectDataProvider 。 如需完整的範例,請參閱 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 XAML 並提供 Attribute 彈性的動態屬性。 您的程式碼也可以繫結至 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

另請參閱