方法: XDocument、XElement、または LINQ for XML クエリの結果にバインドするHow to: Bind to XDocument, XElement, or LINQ for XML Query Results

この例では、XDocument を使用して XML データを ItemsControl にバインドする方法を示します。This example demonstrates how to bind XML data to an ItemsControl using XDocument.

Example

次の XAML コードでは、ItemsControl を定義し、Planet 型のデータ用のデータ テンプレートを http://planetsNS XML 名前空間に含めます。The following XAML code defines an ItemsControl and includes a data template for data of type Planet in the http://planetsNS XML namespace. 名前空間を占有する XML データ型では、名前空間をかっこで囲んで含める必要があります。また、その XML データ型が、XAML マークアップ拡張機能が出現する可能性がある場所に出現する場合は、名前空間の前に、かっこのエスケープ シーケンスを使用して指定する必要があります。An XML data type that occupies a namespace must include the namespace in braces, and if it appears where a XAML markup extension could appear, it must precede the namespace with a brace escape sequence. このコードでは、XElement クラスの Element および Attribute メソッドに対応する動的プロパティにバインドします。This code binds to dynamic properties that correspond to the Element and Attribute methods of the XElement class. 動的プロパティによって、XAML がこれらのメソッドの名前を共有する動的プロパティにバインドできます。Dynamic properties enable XAML to bind to dynamic properties that share the names of methods. 詳しくは、「LINQ to XML の動的プロパティ」をご覧ください。To learn more, see LINQ to XML dynamic properties. XML 用の既定の名前空間宣言が属性名には適用されないことに注意してください。Notice how the default namespace declaration for the XML does not apply to attribute names.

<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 という名前の要素のすべてのサブ要素に設定します。The following C# code calls Load and sets the stack panel data context to all subelements of the element named SolarSystemPlanets in the http://planetsNS XML namespace.

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 リソースとして格納できます。XML data can be stored as a XAML resource using ObjectDataProvider. コード例全体については、「L2DBForm.xaml ソース コード」を参照してください。For a complete example, see L2DBForm.xaml source code. 次の例は、コードでデータ コンテキストをオブジェクト リソースに設定する方法を示しています。The following sample shows how code can set the data context to an object resource.

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 および Attribute に動的プロパティをマップすることによって、XAML 内での柔軟性が増します。The dynamic properties that map to Element and Attribute provide flexibility within XAML. コードを LINQ for XML クエリの結果にバインドすることもできます。Your code can also bind to the results of a LINQ for XML query. この例は、要素の値によって並べられたクエリ結果にバインドします。This example binds to query results ordered by an element value.

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

関連項目See also