バインディングのマークアップ拡張機能

プロパティ値を、データ バインドされた値として指定できるようにします。中間の式オブジェクトを作成し、実行時に要素とそのバインディングに適用されるデータ コンテキストを解釈します。

Binding 式の使用方法

<object property="{Binding}" .../>
-or-
<object property="{Binding bindProp1=value1[, bindPropN=valueN]*}" ...
/>
-or-
<object property="{Binding path}" .../>
-or
<object property="{Binding path[, bindPropN=valueN]*}" .../>

構文についてのメモ

これらの構文の [] と * は、リテラルではありません。 0 個以上の bindProp=value ペアを使用できることを示す表記法の一部です。先行する bindProp=value ペアとの区切り記号には , が使用されます。

「バインディング拡張で設定できるバインディング プロパティ」に示すプロパティはいずれも、Binding オブジェクト要素の属性を使用して設定することもできます。 ただしそれは、実際には Binding のマークアップ拡張機能の使用方法ではなく、CLR Binding クラスのプロパティを設定する属性の一般的な XAML 処理にすぎません。 つまり、<Binding bindProp1="value1"[ bindPropN="valueN"]*/> は、Binding 式の使用方法ではなく、Binding オブジェクト要素の属性を使用した同等の構文です。 Binding の特定のプロパティの XAML 属性の使用方法の詳細については、.NET Framework クラス ライブラリで、Binding の該当するプロパティの「XAML 属性の使用方法」を参照してください。

XAML 値

bindProp1, bindPropN

設定対象の Binding プロパティまたは BindingBase プロパティの名前。 Binding のすべてのプロパティを Binding 拡張を使用して設定できるとは限りません。また、プロパティによっては、マークアップ拡張機能をさらに入れ子にしなければ Binding 式の中では設定できません。 「バインディング拡張で設定できるバインディング プロパティ」を参照してください。

value1, valueN

プロパティに設定する値。 属性値の処理は、最終的には、設定される特定の Binding プロパティの型とロジックによって決まります。

path

暗黙的な Binding.Path プロパティを設定するパス文字列。 PropertyPath の XAML 構文 も参照してください。

非修飾の {Binding}

「Binding 式の使用方法」に示した {Binding} という使用方法では、既定値 (null の初期値 Binding.Path など) を使用して Binding オブジェクトが作成されます。 それでも、さまざまなシナリオで役に立ちます。作成される Binding は、実行時のデータ コンテキストで設定される主要なデータ バインディング プロパティ (Binding.PathBinding.Source など) に依存する可能性があるためです。 データ コンテキストの概念の詳細については、「データ バインド (WPF)」を参照してください。

暗黙のパス

Binding マークアップ拡張機能では、Binding.Path を概念的な "既定のプロパティ" として使用します。そのため、Path= を式で指定する必要はありません。 暗黙的なパスを含む Binding 式を指定する場合は、その暗黙的なパスを式で最初に (Binding プロパティを名前で指定する他の bindProp=value ペアより先に) 指定する必要があります (例: {Binding PathString} (PathString は、マークアップ拡張機能の使用方法によって作成される BindingBinding.Path の値に評価される文字列))。 暗黙のパスの後に、他の名前付きプロパティをコンマで区切って追加することもできます。たとえば、{Binding LastName, Mode=TwoWay} のように指定します。

バインディング拡張で設定できるバインディング プロパティ

ここに示す構文では、bindProp=value という一般的な形式を使用します。Binding マークアップ拡張機能/式の構文を使用して設定可能な、BindingBaseBinding の読み書き可能なプロパティは多数あるためです。 暗黙的な Binding.Path 以外は、設定する順序は自由です (Path= を明示的に指定することもできます。その場合は、このプロパティを自由な順序で設定できます)。 基本的に、下の一覧に示したプロパティのうち 0 個以上を、bindProp=value ペアの形式で、コンマで区切って設定します。

これらのプロパティ値のいくつかは、要求しているオブジェクト型が XAML のテキスト構文からのネイティブ型変換をサポートしていないので、さらに属性値として設定するためにマークアップ拡張機能が必要です。 詳細については、.NET Framework クラス ライブラリで各プロパティの「XAML 属性の使用方法」を参照してください。さらなるマークアップ拡張機能の使用を含む場合も含まない場合も、XAML 属性構文で使用する文字列は、Binding 式で指定する値と基本的に同じです。違いは、Binding 式では各 bindProp=value を引用符で囲まないことだけです。

  • BindingGroupName: バインディング グループの候補を示す文字列。 これは比較的高度なバインディング概念です。詳細については、BindingGroupName のリファレンス ページを参照してください。

  • BindsDirectlyToSource: ブール値。true と false のいずれかです。 既定値は、false です。

  • Converter: bindProp=value の文字列として式で設定できますが、そのためには値のオブジェクト参照 (StaticResource のマークアップ拡張機能など) が必要です。 この場合の値は、カスタム コンバーター クラスのインスタンスです。

  • ConverterCulture: 標準ベースの識別子として式で設定できます。ConverterCulture のリファレンス トピックを参照してください。

  • ConverterParameter: bindProp=value の文字列として式で設定できますが、渡されるパラメーターの型に依存します。 値に参照型を渡す場合、この使用方法では入れ子になった StaticResource のマークアップ拡張機能などのオブジェクト参照が必要です。

  • ElementName: このプロパティと RelativeSource および Source は同時に使用できません。これらの各バインディング プロパティは特定のバインディング方法を表します。 「データ バインディングの概要」を参照してください。

  • FallbackValue: bindProp=value の文字列として式で設定できますが、渡される値の型に依存します。 参照型を渡す場合は、入れ子になった StaticResource のマークアップ拡張機能などのオブジェクト参照が必要です。

  • IsAsync: ブール値。true と false のいずれかです。 既定値は、false です。

  • Mode: value は BindingMode 列挙体の定数名です。 たとえば、{Binding Mode=OneWay} のようにします。

  • NotifyOnSourceUpdated: ブール値。true または false のいずれかです。 既定値は、false です。

  • NotifyOnTargetUpdated: ブール値。true と false のいずれかです。 既定値は、false です。

  • NotifyOnValidationError: ブール値。true または false のいずれかです。 既定値は、false です。

  • Path: データ オブジェクトまたは汎用オブジェクト モデルへのパスを表す文字列。 ここで詳しく説明することはできませんが、この形式は、オブジェクト モデルを走査するための複数の異なる規約に対応しています。 「PropertyPath の XAML 構文」を参照してください。

  • RelativeSource: このプロパティと ElementName および Source は同時に使用できません。これらの各バインディング プロパティは特定のバインディング方法を表します。 「データ バインディングの概要」を参照してください。 値を指定するには、入れ子になった RelativeSource のマークアップ拡張機能の使用が必要です。

  • Source: このプロパティと RelativeSource および ElementName は同時に使用できません。これらの各バインディング プロパティは特定のバインディング方法を表します。 「データ バインディングの概要」を参照してください。 入れ子になった拡張機能の使用 (通常は、キーを持つリソース ディクショナリのオブジェクト データ ソースを参照する StaticResource のマークアップ拡張機能) が必要です。

  • StringFormat: バインドされたデータの文字列書式指定規則を表す文字列。 これは比較的高度なバインディング概念です。詳細については、StringFormat のリファレンス ページを参照してください。

  • TargetNullValue: bindProp=value の文字列として式で設定できますが、渡されるパラメーターの型に依存します。 値に参照型を渡す場合は、入れ子になった StaticResource のマークアップ拡張機能などのオブジェクト参照が必要です。

  • UpdateSourceTrigger: value は UpdateSourceTrigger 列挙体の定数名です。 たとえば、{Binding UpdateSourceTrigger=LostFocus} のようにします。 特定のコントロールには、このバインディング プロパティに対して別の既定値がある可能性があります。 「UpdateSourceTrigger」を参照してください。

  • ValidatesOnDataErrors: ブール値。true と false のいずれかです。 既定値は、false です。 「解説」を参照してください。

  • ValidatesOnExceptions: ブール値。true と false のいずれかです。 既定値は、false です。 「解説」を参照してください。

  • XPath: XML データ ソースの XMLDOM へのパスを表す文字列。 「方法 : XMLDataProvider と XPath クエリを使用して XML データにバインドする」を参照してください。

次に示す Binding のプロパティは、Binding マークアップ拡張機能/{Binding} 式の形式を使用して設定することはできません。

  • UpdateSourceExceptionFilter: このプロパティには、コールバック実装への参照が必要です。 コールバック/イベント ハンドラー以外のメソッドは、XAML 構文で参照できません。

  • ValidationRules: このプロパティは、ValidationRule オブジェクトのジェネリック コレクションを受け取ります。 Binding オブジェクト要素のプロパティ要素として表現することもできますが、Binding 式ですぐに使用できる属性解析方法がありません。 ValidationRules のリファレンス トピックを参照してください。

  • XmlNamespaceManager

解説

重要 :重要

依存関係プロパティの優先順位という点では、Binding 式はローカルで設定される値と同等です。Binding 式を持っているプロパティに対してローカル値を設定すると、Binding は完全に削除されます。詳細については、「依存関係プロパティ値の優先順位」を参照してください。

ここでは、基本レベルでのデータ バインディングについては説明しません。 「データ バインディングの概要」を参照してください。

メモメモ

MultiBinding および PriorityBinding は、XAML 拡張構文をサポートしません。代わりに、プロパティ要素を使用します。MultiBinding および PriorityBinding のリファレンス トピックを参照してください。

XAML のブール値は、大文字と小文字を区別しません。 たとえば、{Binding NotifyOnValidationError=true} または {Binding NotifyOnValidationError=True} のように指定できます。

通常、データ検証を伴うバインディングは、{Binding ...} 式としてではなく、明示的な Binding 要素で指定され、ValidatesOnDataErrors または ValidatesOnExceptions を式で設定することは一般的ではありません。 これは、コンパニオン プロパティである ValidationRules を式の形式で容易に設定できないためです。 詳細については、「方法 : バインディングの検証の実装」を参照してください。

Binding はマークアップ拡張機能です。 一般にマークアップ拡張機能を実装するのは、属性値をリテラル値やハンドラー名以外にエスケープする要件が存在し、その要件の適用範囲がグローバルで、特定の型やプロパティに属性が追加される型コンバーターにとどまらない場合です。 XAML のすべてのマークアップ拡張機能では、それぞれの属性構文で { と } の 2 つの記号を使用します。これは規約であり、これに従って XAML プロセッサは、マークアップ拡張機能で文字列の内容を処理する必要があることを認識します。 詳細については、「マークアップ拡張機能と WPF XAML」を参照してください。

Binding が他のマークアップ拡張機能と異なる点は、WPF の XAML 実装のこの拡張機能を実装する Binding クラスが、XAML に関連しないその他のいくつかのメソッドやプロパティも実装することです。 他のメンバーの目的は、Binding を汎用性の高い、自己完結型のクラスにすることです。これによって、XAML マークアップ拡張機能としての機能に加え、さまざまなデータ バインディング シナリオに対応できるようになります。

参照

参照

Binding

概念

データ バインディングの概要

XAML の概要 (WPF)

マークアップ拡張機能と WPF XAML