LINQ to XML による WPF のデータ バインディングの概要WPF Data Binding with LINQ to XML Overview

このトピックでは、System.Xml.Linq 名前空間の動的データ バインド機能について説明します。This topic introduces the dynamic data binding features in the System.Xml.Linq namespace. これらの機能は、Windows Presentation Foundation (WPF) のユーザー インターフェイス (UI) 要素のデータ ソースとして使用できます。These features can be used as a data source for user interface (UI) elements in the Windows Presentation Foundation (WPF).

XAML と LINQ to XMLXAML and LINQ to XML

Extensible Application Markup Language (XAML) は、.NET Framework 3.0 のテクノロジをサポートするために Microsoft によって作成された XML 言語です。The Extensible Application Markup Language (XAML) is an XML dialect created by Microsoft to support .NET Framework 3.0 technologies. XAML は、WPF ではユーザー インターフェイス要素やその関連機能 (イベントやデータ バインドなど) を表すために使用され、It is used in WPF to represent user interface elements and related features, such as events and data binding. Windows Workflow Foundation ではプログラム制御 (ワークフロー) などのプログラム構造を表すために使用されます。In Windows Workflow Foundation, XAML is used to represent program structure, such as program control (workflows). XAML を使用すると、テクノロジの宣言型の側面を、プログラムのより個別的な動作を定義する、関連する手続き型のコードから分離することができます。XAML enables the declarative aspects of a technology to be separated from the related procedural code that defines the more individualized behavior of a program.

XAML と LINQ to XML の相互作用には、大きく分けて次の 2 つの方法があります。There are two broad ways that XAML and LINQ to XML can interact:

  • XAML ファイルは整形式の XML であるため、LINQ to XML などの XML テクノロジによるクエリや操作が可能です。Because XAML files are well-formed XML, they can be queried and manipulated through XML technologies such as LINQ to XML.

  • LINQ to XML のクエリはデータのソースを表すため、WPF UI 要素のデータ バインドのデータ ソースとして使用できます。Because LINQ to XML queries represent a source of data, these queries can be used as a data source for data binding for WPF UI elements.

    このドキュメントでは、2 番目のシナリオについて説明します。This documentation describes the second scenario.

Windows Presentation Foundation のデータ バインドData Binding in the Windows Presentation Foundation

WPF のデータ バインドでは、UI 要素のプロパティをデータ ソースに関連付けることができます。WPF data binding enables a UI element to associate one of its properties with a data source. たとえば、ユーザー定義オブジェクトのパブリック プロパティの値をテキストとして表示する Label はその簡単な例です。A simple example of this is a Label whose text presents the value of a public property in a user-defined object. WPF のデータ バインドは次のコンポーネントに依存しています。WPF data binding relies on the following components:

コンポーネントComponent 説明Description
バインド ターゲットBinding target データ ソースに関連付ける UI 要素。The UI element to be associated with the data source. WPF のビジュアル要素は UIElement クラスから派生します。Visual elements in WPF are derived from the UIElement class.
対象になるプロパティTarget property バインド ターゲットの依存プロパティ。データ バインディング ソースの値が反映されます。The dependency property of the binding target that reflects the value of the data-binding source. 依存プロパティは、DependencyObject の派生元である UIElement クラスによって直接サポートされます。Dependency properties are directly supported by the DependencyObject class, which UIElement derives from.
バインド ソースBinding source 表示のために UI 要素に渡される 1 つ以上の値のソース オブジェクト。The source object for one or more values that are supplied to the UI element for presentation. WPF で自動的にサポートされるバインド ソースは、CLR オブジェクト、ADO.NET データ オブジェクト、XML データ (XPath または LINQ to XML のクエリからの XML データ)、および他の DependencyObject です。WPF automatically supports the following types as binding sources: CLR objects, ADO.NET data objects, XML data (from XPath or LINQ to XML queries), or another DependencyObject.
ソース パスSource path バインドされる値または値のセットに解決されるバインド ソースのプロパティ。The property of the binding source that resolves to the value or set of values that is to be bound.

依存プロパティは WPF 固有の概念であり、UI 要素の動的に計算されるプロパティを表します。A dependency property is a concept specific to WPF that represent a dynamically computed property of a UI element. たとえば、依存プロパティの既定値は多くの場合、親要素によって提供されます。For example, dependency properties often have default values or values that are provided by a parent element. これらの特殊なプロパティは、DependencyProperty クラスのインスタンスに基づいています (標準のプロパティはフィールドに基づいています)。These special properties are backed by instances of the DependencyProperty class (and not fields as with standard properties). 依存関係プロパティの詳細については、「依存関係プロパティの概要」を参照してください。For more information, see Dependency Properties Overview.

WPF の動的データ バインディングDynamic Data Binding in WPF

既定では、対象となる UI 要素が初期化されたときにだけデータ バインディングが行われます。By default, data binding occurs only when the target UI element is initialized. これをワンタイム バインドと呼びます。This is called one-time binding. ほとんどの場合、このバインドは十分には役立ちません。一般に、データ バインディングのソリューションでは、次のいずれかの方法を使用して実行時に変更が動的に反映されるようにする必要があります。For most purposes, this is insufficient; typically, a data-binding solution requires that the changes be dynamically propagated at run time using one of the following:

  • 一方向のバインド。一方に対する変更が自動的に反映されます。One-way binding causes the changes to one side to be propagated automatically. ソースに対する変更がターゲットに反映されるのが最も一般的ですが、その逆のパターンが役に立つ場合もあります。Most commonly, changes to the source are reflected in the target, but the reverse can sometimes be useful.

  • 双方向のバインド。ソースに対する変更がターゲットに、ターゲットに対する変更がソースに、それぞれ自動的に反映されます。In two-way binding, changes to the source are automatically propagated to the target, and changes to the target are automatically propagated to the source.

    一方向または双方向のバインドが行われるようにするには、変更通知のメカニズムをソースに実装する必要があります。たとえば、INotifyPropertyChanged インターフェイスを実装するか、サポートする各プロパティに対して PropertyNameChanged パターンを使用します。For one-way or two-way binding to occur, the source must implement a change notification mechanism, for example by implementing the INotifyPropertyChanged interface or by using a PropertyNameChanged pattern for each property supported.

    WPF のデータ バインディングの詳細については、「データ バインディングの概要」を参照してください。For more information about data binding in WPF, see Data Binding (WPF).

LINQ to XML クラスの動的プロパティDynamic Properties in LINQ to XML Classes

ほとんどの LINQ to XML クラスは、WPF の動的データ ソースとして適切ではありません。その理由は、最も有用な情報の一部はメソッドを経由した場合にのみ取得でき (プロパティでは取得できません)、LINQ to XML クラスのプロパティには変更通知も実装されていないためです。Most LINQ to XML classes do not qualify as proper WPF dynamic data sources: Some of the most useful information is available only through methods (and not properties), and properties in these classes do not implement change notifications. LINQ to XML では、WPF のデータ バインディングをサポートするために一連の動的プロパティが公開されます。To support WPF data binding, LINQ to XML exposes a set of dynamic properties.

これらの動的プロパティは、XAttribute クラスと XElement クラスの既存のメソッドやプロパティと同じ機能を持つ特殊な実行時プロパティであり、These dynamic properties are special run-time properties that duplicate the functionality of existing methods and properties in the XAttribute and XElement classes. これらのクラスを WPF の動的データ ソースとして使用することのみを目的として追加されています。They were added to these classes solely to enable them to act as dynamic data sources for WPF. この目的を満たすため、これらすべての動的プロパティに変更通知が実装されています。To meet this need, all these dynamic properties implement change notifications. これらの動的プロパティの詳細については、次の「LINQ to XML の動的プロパティ」を参照してください。A detailed reference for these dynamic properties is provided in the next section, LINQ to XML Dynamic Properties.

注意

System.Xml.Linq 名前空間のさまざまなクラスに含まれている標準のパブリック プロパティの多くは、一方向のデータ バインドには使用できます。Many of the standard public properties, found in the various classes in the System.Xml.Linq namespace, can be used for one-time data binding. ただし、既に説明したように、一方向のデータ バインドではソースもターゲットも動的に更新されません。However, remember that neither the source nor the target will be dynamically updated under this scheme.

動的プロパティへのアクセスAccessing Dynamic Properties

XAttribute クラスと XElement クラスの動的プロパティには、標準のプロパティのようにアクセスすることはできません。The dynamic properties in the XAttribute and XElement classes cannot be accessed like standard properties. たとえば、C# などの CLR 準拠の言語で次のような操作を行うことはできません。For example, in CLR-compliant languages such as C#, they cannot be:

  • コンパイル時に直接アクセスする。Accessed directly at compile time. 動的プロパティは、コンパイラや Visual Studio の IntelliSense からは見えません。Dynamic properties are invisible to the compiler and to Visual Studio IntelliSense.

  • .NET リフレクションを使用して実行時に検出またはアクセスする。Discovered or accessed at run time using .NET reflection. 動的プロパティは実行時においても、CLR の基本的な意味でのプロパティではありません。Even at run time, they are not properties in the basic CLR sense.

    C# で動的プロパティへアクセスするには、実行時に System.ComponentModel 名前空間の機能を使用する必要があります。In C#, dynamic properties can only be accessed at run time through facilities provided by the System.ComponentModel namespace.

    一方、XML ソースでは、次のような形式の単純な表記法を使用して動的プロパティにアクセスできます。In contrast, however, in an XML source dynamic properties can be accessed through a straightforward notation in the following form:

<object>.<dynamic-property>  

この 2 つのクラスの動的プロパティは、1 つの値またはインデクサーのいずれかに解決されます。1 つの値の場合は直接使用できますが、インデクサーの場合は、結果の値または値のコレクションを取得するにはインデックスを渡す必要があります。The dynamic properties for these two classes either resolve to a value that can be used directly, or to an indexer that must be supplied with an index to obtain the resulting value or collection of values. インデクサーの場合の構文は次のようになります。The latter syntax takes the form:

<object>.<dynamic-property>[<index-value>]  

詳細については、「LINQ to XML の動的プロパティ」を参照してください。For more information, see LINQ to XML Dynamic Properties.

WPF の動的バインドを実装するには、動的プロパティを System.Windows.Data 名前空間 (特に Binding クラス) の機能と共に使用します。To implement WPF dynamic binding, dynamic properties will be used with facilities provided by the System.Windows.Data namespace, most notably the Binding class.

関連項目See Also

LINQ to XML による WPF のデータ バインディング WPF Data Binding with LINQ to XML
LINQ to XML の動的プロパティ LINQ to XML Dynamic Properties
WPF の XAML XAML in WPF
データ バインド (WPF) Data Binding (WPF)
ワークフロー マークアップの使用Using Workflow Markup