方法 : XDocument、XElement、または LINQ for XML クエリの結果にバインドする

この例は、XDocument を使用して XML データを ItemsControl にバインドする方法を示しています。

使用例

次の XAML コードは、ItemsControl を定義し、Planet 型のデータ用のデータ テンプレートを http://planetsNS XML 名前空間に含めます。 名前空間を占有する XML データ型では、名前空間をかっこで囲んで含める必要があります。また、その 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 = 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();

Element および Attribute にマップされる動的プロパティによって、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 の動的プロパティ