注
Windows 10 では、パフォーマンスと開発者の生産性のために最適化された新しいバインド メカニズムを使用できます。 {x:Bind} マークアップ拡張を参照してください。
注
{Binding} を使用したアプリでのデータ バインディングの使用に関する一般的な情報 (および {x:Bind} と {Binding} の間の詳細な比較) については、「データ バインディングの詳細」を参照してください。
{Binding} マークアップ拡張は、コントロールのプロパティをコードなどのデータ ソースから取得した値にデータバインドするために使用されます。 {Binding} マークアップ拡張は、XAML 読み込み時に Binding クラスのインスタンスに変換されます。 このバインド オブジェクトは、データ ソースのプロパティから値を取得し、コントロールのプロパティにプッシュします。 必要に応じて、データ ソース プロパティの値の変更を観察し、それらの変更に基づいて自身を更新するようにバインディング オブジェクトを構成できます。 また、必要に応じて、コントロール値への変更をソース プロパティにプッシュするように構成することもできます。 データ バインディングのターゲットであるプロパティは、依存関係プロパティである必要があります。 詳細については、「 依存関係プロパティの概要」を参照してください。
{Binding} はローカル値と同じ依存関係プロパティの優先順位を持ち、命令型コードでローカル値を設定すると、マークアップに設定されている {Binding} の効果が削除されます。
XAML 属性の使用方法
<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
任期 | 説明 |
---|---|
の propertyPath | バインディングのプロパティ パスを指定する文字列。 詳細については、以下の「プロパティ パス」セクションを参照してください。 |
bindingProperties を |
propName=値[, propName=値]* 名前と値のペア構文を使用して指定される 1 つ以上のバインド プロパティ。 |
propName | Binding オブジェクトに設定するプロパティの文字列名。 たとえば、"Converter" などです。 |
価値 | プロパティを設定する値。 引数の構文は、以下の {Binding} セクションで設定できる Binding クラスのプロパティ によって異なります。 |
プロパティの経路
Path は、バインド先のプロパティ (ソース プロパティ) を表します。 Path は位置指定パラメーターです。つまり、パラメーター名を明示的に ({Binding Path=EmployeeID}
) 使用することも、最初の名前のないパラメーター ({Binding EmployeeID}
) として指定することもできます。
Path の型は、「プロパティ パス」という、カスタム型またはフレームワーク型のプロパティやサブプロパティに評価される文字列です。 型には DependencyObject を指定できますが、必要はありません。 プロパティ パスのステップはドット (.) で区切られ、複数の区切り記号を含めることで、連続するサブプロパティを走査できます。 バインドされるオブジェクトを実装するために使用されるプログラミング言語に関係なく、ドット区切り記号を使用します。
たとえば、UI を従業員オブジェクトの名プロパティにバインドするには、プロパティ パスが "Employee.FirstName" である可能性があります。 アイテム コントロールを従業員の依存を含むプロパティにバインドする場合、プロパティ パスは "Employee.Dependents" になり、アイテム コントロールの項目テンプレートが "Dependents" にアイテムを表示する処理を行います。
データ ソースがコレクションの場合、プロパティ パスはコレクション内の項目を位置またはインデックスで指定できます。 たとえば、「Teams[0].Players」の "[]" がコレクション内の最初の項目を示す "0" を囲んでいます。
既存の DependencyObject に対して ElementName バインドを使用する場合は、添付プロパティをプロパティ パスの一部として使用できます。 添付プロパティ名の中間ドットがプロパティ パスのステップと見なされないようにするためには、所有者名で修飾された添付プロパティ名の周りにかっこを付けます。たとえば、(AutomationProperties.Name)
のようにします。
プロパティ パスの中間オブジェクトは、実行時表現で PropertyPath オブジェクトとして格納されますが、ほとんどのシナリオでは、コード内で PropertyPath オブジェクトを操作する必要はありません。 通常、XAML を使用して必要なバインディング情報を指定できます。
プロパティ パスの文字列構文、アニメーション機能領域のプロパティ パス、および PropertyPath オブジェクトの構築の詳細については、「 Property-path 構文」を参照してください。
{Binding} で設定できる Binding クラスのプロパティ
マークアップ拡張機能で設定できる Binding の読み取り/書き込みプロパティが複数存在するため、{Binding} は bindingProperties プレースホルダー構文で示されています。 プロパティは、コンマ区切りの propName=値 ペアで任意の順序で設定できます。 一部のプロパティには型変換がない型が必要であるため、 {Binding} 内で入れ子になった独自のマークアップ拡張が必要です。
プロパティ | 説明 |
---|---|
パスの | 上記の「プロパティ パス」セクションを参照してください。 |
コンバーター | バインディング エンジンによって呼び出されるコンバーター オブジェクトを指定します。 コンバーターは、 {StaticResource} マークアップ拡張機能 を使用してマークアップで設定し、リソース ディクショナリからそのオブジェクトを参照できます。 |
変換言語 | コンバーターで使用するカルチャを指定します。 ( Converter を設定している場合)。カルチャは標準ベースの識別子として設定されます。 詳細については、「ConverterLanguage」を参照してください。 |
コンバータパラメーター | コンバーター ロジックで使用できるコンバーター パラメーターを指定します。 ( Converter を設定している場合)。ほとんどのコンバーターは、変換に渡された値から必要なすべての情報を取得する単純なロジックを使用し、 ConverterParameter 値は必要ありません。 ConverterParameter パラメーターは、ConverterParameter で渡された内容をキーオフする条件付きロジックを持つ、より複雑なコンバーター実装用です。 文字列以外の値を使用するコンバーターを記述できますが、これは一般的ではありません。詳細については、 ConverterParameter の「解説」を参照してください。 |
ElementName | Name プロパティまたは x:Name 属性を持つ同じ XAML コンストラクト内の別の要素を参照して、データ ソースを指定します。 これは、多くの場合、関連する値を共有したり、ある UI 要素のサブプロパティを使用して、XAML コントロール テンプレートなどの別の要素に特定の値を提供したりするために使用されます。 |
フォールバック値 | ソースまたはパスを解決できない場合に表示する値を指定します。 |
モードの | バインド モードを、"OneTime"、"OneWay"、または "TwoWay" のいずれかの値として指定します。 これらは BindingMode 列挙型の定数名に対応します。 既定値は "OneWay" です。 これは {x:Bind} の既定値 ("OneTime" ) とは異なります。 |
の RelativeSource | バインディング ターゲットの位置を基準としたバインディング ソースの位置を記述して、データ ソースを指定します。 これは、XAML コントロール テンプレート内のバインドで最もよく使用されます。 {RelativeSource} マークアップ拡張を設定します。 |
ソース | オブジェクト データ ソースを指定します。 Binding マークアップ拡張機能内で、Source プロパティには、{StaticResource} マークアップ拡張参照などのオブジェクト参照が必要です。 このプロパティが指定されていない場合、動作するデータ コンテキストはソースを指定します。 個々のバインドでソース値を指定せず、代わりに複数のバインドに対して共有 DataContext に依存する方が一般的です。 詳細については、 DataContext または データ バインディングの詳細を参照してください。 |
TargetNullValue | ソース値が解決されるが、明示的に nullに設定されているときに表示する値を指定します。 |
の UpdateSourceTrigger | バインディング ソースの更新のタイミングを指定します。 指定しない場合、既定値は Default です。 |
手記マークアップを {x:Bind} から {Binding} に変換する場合は、Mode プロパティの既定値の違いに注意してください。
Converter、ConverterLanguage、ConverterLanguage はすべて、バインディング ソースからバインディング ターゲット プロパティと互換性のある型または値に値または型を変換するシナリオに関連しています。 詳細と例については、「データ バインディングの詳細な」の「データ変換」セクションを参照してください。
注
Windows 10 バージョン 1607 以降、XAML フレームワークにはブール型から可視性へのコンバーターが組み込まれています。 コンバーターは true を Visible 列挙値にマッピングし、false を Collapsed にマッピングするため、コンバーターを新たに作成せずに Visibility プロパティを Boolean にバインドできます。 組み込みのコンバーターを使用するには、アプリの最小ターゲット SDK バージョンが 14393 以降である必要があります。 アプリが以前のバージョンの Windows 10 を対象とする場合は使用できません。 ターゲット バージョンの詳細については、「バージョン アダプティブ コード」を参照してください。
ヒントパス や ConverterParameterなど、値に一つの波括弧を指定する必要がある場合は、その前にバックスラッシュ(円記号 \{
)を付けます。 または、エスケープする必要がある中かっこを含む文字列全体を 2 次引用符セットで囲みます (例: ConverterParameter='{Mix}'
)。
例示
<!-- binding a UI element to a view model -->
<Page ... >
<Page.DataContext>
<local:BookstoreViewModel/>
</Page.DataContext>
<GridView ItemsSource="{Binding BookSkus}" SelectedItem="{Binding SelectedBookSku, Mode=TwoWay}" ... />
</Page>
<!-- binding a UI element to another UI element -->
<Page ... >
<Page.Resources>
<local:S2Formatter x:Key="GradeConverter"/>
</Page.Resources>
<Slider x:Name="sliderValueConverter" ... />
<TextBox Text="{Binding Path=Value, ElementName=sliderValueConverter,
Mode=OneWay,
Converter={StaticResource GradeConverter}}"/>
</Page>
2 番目の例では、ElementName、Path、Mode、Converter の 4 つの異なるバインディング プロパティを設定します。 この場合、「パス」は、「Binding」プロパティとして明示的に名前が付けられています。
パスは、同じランタイム オブジェクト ツリー内の別のオブジェクトであるデータ バインディング ソース (という名前のsliderValueConverter
) に評価されます。
local:S2Formatter
要素によってインスタンス化されるカスタム クラス) が存在します。
ツールのサポート
Microsoft Visual Studio の Microsoft IntelliSense では、XAML マークアップ エディターで {Binding} を作成するときに、データ コンテキストのプロパティが表示されます。 "{Binding" と入力するとすぐに、 Path に適したデータ コンテキスト プロパティがドロップダウンに表示されます。 IntelliSense は 、バインディングの他のプロパティにも役立ちます。 これを機能させるには、マークアップ ページにデータ コンテキストまたはデザイン時データ コンテキストセットが必要です。 [定義に移動 ] (F12) は {Binding} でも機能します。 または、データ バインディング ダイアログを使用することもできます。