バインディングのマークアップ拡張機能
更新 : 2007 年 11 月
プロパティ値を、データ バインドされた値として指定できるようにします。中間の式オブジェクトを作成し、実行時に要素に適用されるデータ コンテキストを解釈します。
XAML 属性の使用方法
<object property="{Binding}" .../>
または
<object property="{Binding bindingPropertyName1=value,
bindingPropertyName2=value,
bindingPropertyNameN=value}" ...
/>
XAML オブジェクト要素の使用方法
<object>
<object.property>
<Binding/>
</object.property>
</object>
または
<object>
<object.property>
<Binding bindingPropertyName1="value"
bindingPropertyName2="value"
bindingPropertyNameN="value"
/>
</object.property>
</object>
以下に示すプロパティはいずれも、例の属性構文では "プロパティ=値" のペアとして設定されていますが、代わりに、オブジェクト要素構文で定義される Binding 要素の属性として設定することもできます。
XAML 値
bindingPropertyName# |
設定する Binding プロパティの Name。Binding のすべてのプロパティをバインディング拡張を使用して設定できるとは限りません。また、プロパティによっては、マークアップ拡張機能をさらに入れ子にしなければ設定できません。「バインディング拡張で設定できるバインディング プロパティ」を参照してください。 |
value |
プロパティに設定する値。属性値の処理は、最終的には、設定される bindingPropertyName の型とロジックによって決まります。 |
バインディング拡張で設定できるバインディング プロパティ
ここに示す構文では、bindingPropertyName=value という一般的な形式を使用します。Binding マークアップ拡張機能構文を使用して設定可能な、BindingBase や Binding の読み書き可能なプロパティは多数あるためです。設定する順序は自由です。基本的に、下の一覧に示したプロパティのうち 0 個以上を、"プロパティ=値" ペアの形式で、コンマで区切って設定します。
これらのプロパティ値のいくつかは、要求しているオブジェクト型がネイティブ型変換をサポートしていないので、さらにマークアップ拡張機能の使用を XAML の中で属性値として設定する必要があります。各プロパティの適切な属性構文については、「XAML 属性の使用方法」を参照してください。
BindsDirectlyToSource: ブール型。true と false のいずれかです。
Converter: XAML で設定できますが、設定するには StaticResource のマークアップ拡張機能などのオブジェクト参照が必要です。
ConverterCulture: 標準ベースの識別子として設定できます。ConverterCulture のリファレンスを参照してください。
ConverterParameter: 参照型を渡す場合は、StaticResource のマークアップ拡張機能などのオブジェクト参照が必要です。
ElementName: このプロパティと、RelativeSource、および Source は同時に使用できません。これらの各プロパティは特定のバインディング方法を表します。「データ バインディングの概要」を参照してください。
FallbackValue: 参照型を渡す場合は、StaticResource のマークアップ拡張機能などのオブジェクト参照が必要です。
Path: 「PropertyPath の XAML 構文」を参照してください。
RelativeSource: このプロパティと、ElementName、および Source は同時に使用できません。これらの各プロパティは特定のバインディング方法を表します。「データ バインディングの概要」を参照してください。RelativeSource のマークアップ拡張機能 を使用することが必要です。
Source: このプロパティと、RelativeSource、および ElementName は同時に使用できません。これらの各プロパティは特定のバインディング方法を表します。「データ バインディングの概要」を参照してください。StaticResource のマークアップ拡張機能などのオブジェクト参照が必要です。
次に示す Binding のプロパティは、Binding マークアップ拡張機能を使用して設定することはできません。
解説
ここで使用している bindingPropertyName プレースホルダは、Binding クラスの宣言された設定可能なプロパティの名前に相当します。値の文字列は、XAML 要素として宣言された Binding 内で XAML 属性としてそのプロパティを設定するときと同じものです。
ここでは説明されていないデータ バインディングの概念については、「データ バインディングの概要」を参照してください。代替構文の詳細については「バインディング宣言の概要」を参照してください。代替構文の説明では、同等のバインディングを作成するためのさまざまな構文を取り上げています。XAML の Binding オブジェクト要素の属性プロパティ、Binding のプロパティ要素構文、SetBinding または Binding コンストラクタを使用した手順コードによるバインディングの作成などがあります。
重要 : |
---|
依存関係プロパティの優先順位という点では、バインディング式はローカルで設定される値と同等です。Binding 式を持っているプロパティに対してローカル値を設定すると、Binding は完全に削除されます。詳細については、「依存関係プロパティ値の優先順位」を参照してください。 |
メモ : |
---|
MultiBinding および PriorityBinding は、同じ BindingBase クラスを共有することによって実際には Binding に対する XAML の動作を実装していますが、これらは XAML 拡張構文をサポートしません。 |
Binding はマークアップ拡張機能です。一般にマークアップ拡張機能を実装するのは、属性値をリテラル値やハンドラ名以外にエスケープする要件が存在し、その要件の適用範囲がグローバルで、特定の型やプロパティに型コンバータを適用するだけにとどまらない場合です。XAML のすべてのマークアップ拡張機能では、それぞれの属性構文で { と } の 2 つの記号を使用します。これは規約であり、これに従って XAML プロセッサは、マークアップ拡張機能で属性を処理する必要があることを認識します。詳細については、「マークアップ拡張機能と XAML」を参照してください。Binding が他のマークアップ拡張機能と異なる点は、この拡張機能の機能を実装する Binding クラスが、その他の多数のメソッドやプロパティも実装することです。これらの他のメンバは、マークアップ拡張機能の機能に直接必要なものではありません。このようなメンバの目的は、Binding を汎用性の高い、自己完結型のクラスにすることです。これによって、XAML マークアップ拡張機能としての機能に加え、さまざまなデータ バインディング シナリオに対応できるようになります。