{Binding} マークアップ拡張{Binding} markup extension

  パフォーマンスと開発者の生産性を最適化されている Windows 10 の新しいバインド メカニズムがあります。Note  A new binding mechanism is available for Windows 10, which is optimized for performance and developer productivity. {x:Bind} マークアップ拡張」をご覧ください。See {x:Bind} markup extension.

  を使用してアプリケーションにおけるデータ バインディングの使用に関する一般的な情報 {binding} (と的な比較について {X:bind}{binding} ) を参照してください深さでのデータ バインディングします。Note  For general info about using data binding in your app with {Binding} (and for an all-up comparison between {x:Bind} and {Binding}), see Data binding in depth.

{Binding} マークアップ拡張機能はコードなどのデータ ソースからの値をコントロールのデータ バインド プロパティを使用します。The {Binding} markup extension is used to data bind properties on controls to values coming from a data source such as code. {Binding} マークアップ拡張は、XAML の読み込み時に Binding クラスのインスタンスに変換されます。The {Binding} markup extension is converted at XAML load time into an instance of the Binding class. このバインド オブジェクトは、データ ソースのプロパティから値を取得し、その値をコントロールのプロパティにプッシュします。This binding object gets a value from a property on a data source, and pushes it to the property on the control. 必要な場合、バインディング オブジェクトは、データ ソース プロパティの値の変化を監視し、その変化に基づいて自分自身を更新するように構成できます。The binding object can optionally be configured to observe changes in the value of the data source property and update itself based on those changes. また、そのコントロールの値の変化をソース プロパティにプッシュするように構成することもできます。It can also optionally be configured to push changes to the control value back to the source property. データ バインディングのターゲットとなるプロパティは、依存関係プロパティである必要があります。The property that is the target of a data binding must be a dependency property. 詳しくは、「依存関係プロパティの概要」をご覧ください。For more info, see Dependency properties overview.

{Binding} には、ローカル値と同じ依存関係プロパティの優先順位があります。命令型コードにローカル値を設定すると、マークアップに設定されたすべての {Binding} の影響がなくなります。{Binding} has the same dependency property precedence as a local value, and setting a local value in imperative code removes the effect of any {Binding} set in markup.

XAML 属性の使用方法XAML attribute usage

<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
用語Term 説明Description
propertyPathpropertyPath バインドのプロパティ パスを指定する文字列。A string that specifies the property path for the binding. 詳しくは、以下の「プロパティ パス」をご覧ください。More info is in the Property path section below.
bindingPropertiesbindingProperties propname パラメーター=[、 propname パラメーター=]*propName=value[, propName=value]*
名前と値のペアの構文を使って指定する、1 つ以上のバインド プロパティ。One or more binding properties that are specified using a name/value pair syntax.
propNamepropName Binding オブジェクトで設定するプロパティの文字列名。The string name of the property to set on the Binding object. たとえば、"Converter" です。For example, "Converter".
valuevalue プロパティに設定する値。The value to set the property to. 引数の構文は、下記の「{Binding} で設定できる Binding クラスのプロパティ」セクションで示しているプロパティによって異なります。The syntax of the argument depends on the property of Properties of the Binding class that can be set with {Binding} section below.

プロパティ パスProperty path

パス (ソースのプロパティ) にバインドするプロパティについて説明します。Path describes the property that you're binding to (the source property). Path は位置パラメーターであるため、パラメーター名を明示的に使用する ({Binding Path=EmployeeID}) ことも、最初の無名パラメーターとして指定する ({Binding EmployeeID}) こともできます。Path is a positional parameter, which means you can use the parameter name explicitly ({Binding Path=EmployeeID}), or you can specify it as the first unnamed parameter ({Binding EmployeeID}).

Path の型はプロパティ パスであり、この文字列は、カスタム型または framework 型のプロパティまたはサブプロパティに評価されます。The type of Path is a property path, which is a string that evaluates to a property or sub-property of either your custom type or a framework type. 型は DependencyObject にすることができますが、そうしなければならないわけではありません。The type can be, but does not need to be, a DependencyObject. プロパティ パスのステップは、ドット (.) で区切ります。複数の区切り記号を指定することで、連続するサブプロパティを走査できます。Steps in a property path are delimited by dots (.), and you can include multiple delimiters to traverse successive sub-properties. バインドされているオブジェクトを実装するために使用するプログラミング言語に関係なく、ドット区切り記号を使います。Use the dot delimiter regardless of the programming language used to implement the object being bound to.

たとえば、UI を従業員オブジェクトの名プロパティにバインドする場合、プロパティ パスは "Employee.FirstName" のようになります。For example, to bind UI to an employee object's first name property, your property path might be "Employee.FirstName". 従業員の扶養家族を含むプロパティに項目コントロールをバインドする場合、プロパティ パスは "Employee.Dependents" となり、"Dependents" の項目の表示には項目コントロールの項目テンプレートが使われます。If you are binding an items control to a property that contains an employee's dependents, your property path might be "Employee.Dependents", and the item template of the items control would take care of displaying the items in "Dependents".

データ ソースがコレクションである場合、プロパティ パスには、位置またはインデックスによりコレクション内の項目を指定できます。If the data source is a collection, then a property path can specify items in the collection by their position or index. たとえば、"チーム[0]します。プレーヤー"、場所、リテラル"[]"「0」を囲むコレクション内の最初の項目を指定します。For example, "Teams[0].Players", where the literal "[]" encloses the "0" that specifies the first item in a collection.

既にある DependencyObject への ElementName バインドを使う場合は、プロパティ パスの一部として添付プロパティを使うことができます。When using an ElementName binding to an existing DependencyObject, you can use attached properties as part of the property path. 添付プロパティの名前に含まれるドットがプロパティ パスへのステップとは見なされないように、添付プロパティを明確に示すには、所有者で修飾された添付プロパティの名前を、(AutomationProperties.Name) のようにかっこで囲みます。To disambiguate an attached property so that the intermediate dot in the attached property name is not considered a step into a property path, put parentheses around the owner-qualified attached property name; for example, (AutomationProperties.Name).

プロパティ パスの中間オブジェクトは、実行時の形式で PropertyPath オブジェクトとして格納されますが、ほとんどのシナリオでは、コードで PropertyPath オブジェクトを操作する必要はありません。A property path intermediate object is stored as a PropertyPath object in a run-time representation, but most scenarios won't need to interact with a PropertyPath object in code. 通常、XAML を使って必要なバインド情報を指定できます。You can usually specify the binding info you need using XAML.

プロパティ パスの文字列の構文、アニメーション機能領域のプロパティ パス、PropertyPath オブジェクトの作成について詳しくは、「プロパティ パス構文」をご覧ください。For more info about the string syntax for a property path, property paths in animation feature areas, and constructing a PropertyPath object, see Property-path syntax.

{Binding} で設定できる Binding クラスのプロパティProperties of the Binding class that can be set with {Binding}

{Binding} は、bindingProperties プレースホルダー構文で示されます。これは、マークアップ拡張で設定可能な Binding の読み取り/書き込みプロパティが複数あるためです。{Binding} is illustrated with the bindingProperties placeholder syntax because there are multiple read/write properties of a Binding that can be set in the markup extension. プロパティは、propName=value ペアをコンマで区切ることにより、任意の順序で設定できます。The properties can be set in any order with comma-separated propName=value pairs. プロパティによっては、型変換をサポートしていない型が必要なものがあります。そのため、これらのプロパティでは、 {Binding} 内で入れ子にされた独自のマークアップ拡張が必要です。Some of the properties require types that don't have a type conversion, so these require markup extensions of their own nested within the {Binding}.

プロパティProperty 説明Description
パスPath 上記の「プロパティ パス」をご覧ください。See the Property path section above.
コンバーターConverter バインド エンジンによって呼び出されるコンバーター オブジェクトを指定します。Specifies a converter object that is called by the binding engine. コンバーターは、{StaticResource} マークアップ拡張を使ってリソース ディクショナリのそのオブジェクトを参照するマークアップで設定できます。The converter can be set in markup using the {StaticResource} markup extension to reference to that object from a resource dictionary.
ConverterLanguageConverterLanguage コンバーターで使うカルチャを指定します Specifies the culture to be used by the converter. (設定している場合は、 コンバーター)。カルチャは、標準ベースの識別子として設定されます。(If you're setting Converter.) The culture is set as a standards-based identifier. 詳しくは、「ConverterLanguage」をご覧ください。For more info, see ConverterLanguage
ConverterParameterConverterParameter コンバーター ロジックで使うことができるコンバーター パラメーターを指定します Specifies a converter parameter that can be used in converter logic. (設定している場合は、 コンバーター)。ほとんどのコンバーターが変換すると、渡された値から必要なすべての情報を取得する単純なロジックを使用し、必要はありません、 ConverterParameter値。(If you're setting Converter.) Most converters use simple logic that get all the info they need from the passed value to convert, and don't need a ConverterParameter value. ConverterParameter パラメーターは、ConverterParameter で渡された値を利用する条件付きロジックを持つ、より複雑なコンバーターを実装するために存在します。The ConverterParameter parameter is for more complex converter implementations that have conditional logic that keys off what's passed in ConverterParameter. また、文字列以外の値を使うコンバーターも作成できますが、一般的ではありません。詳しくは、「ConverterParameter」の「注釈」をご覧ください。You can write a converter that uses values other than strings but this is uncommon, see Remarks in ConverterParameter for more info.
ElementNameElementName Name プロパティまたは x:Name 属性 がある別の要素を同じ XAML コンストラクトで参照して、データ ソースを指定します。Specifies a data source by referencing another element in the same XAML construct that has a Name property or x:Name attribute. 通常は、関連する値を共有するか、1 つの UI 要素のサブプロパティを使って別の要素の特定の値を指定するために使われます (XAML コントロール テンプレートなどで)。This is often use to share related values or use sub-properties of one UI element to provide a specific value for another element, for example in a XAML control template.
FallbackValueFallbackValue ソースまたはパスを解決できない場合に表示する値を指定します。Specifies a value to display when the source or path cannot be resolved.
モードMode これらの値の 1 つとして、バインディング モードを指定します。"OneTime"、"OneWay"または"TwoWay"。Specifies the binding mode, as one of these values: "OneTime", "OneWay", or "TwoWay". これらは、BindingMode 列挙体の定数名に対応します。These correspond to the constant names of the BindingMode enumeration. 既定は "OneWay" です。The default is "OneWay". これは、 {x:Bind} の既定値 (OneTime) とは異なる点に注意してください。Note that this differs from the default for {x:Bind}, which is "OneTime".
RelativeSourceRelativeSource バインディング ターゲットの位置に対するバインド ソースの位置を記述することで、データ ソースを指定します。Specifies a data source by describing the position of the binding source relative to the position of the binding target. これは、XAML コントロール テンプレート内のバインドで最もよく使われます。This is most often used in bindings within XAML control templates. {RelativeSource} マークアップ拡張 を設定します。Setting the {RelativeSource} markup extension.
ソースSource オブジェクトのデータ ソースを指定します。Specifies the object data source. Binding マークアップ拡張では、Source プロパティに {StaticResource} マークアップ拡張参照などのオブジェクト参照を指定する必要があります。Within the Binding markup extension, the Source property requires an object reference, such as a {StaticResource} markup extension reference. このプロパティを指定しない場合、実行中のデータ コンテキストによりソースが指定されます。If this property is not specified, the acting data context specifies the source. 個々のバインドで Source 値を指定する代わりに、複数のバインドで共有 DataContext を利用する方が一般的です。It's more typical to not specify a Source value in individual bindings, and instead to rely on the shared DataContext for multiple bindings. 詳しくは、「DataContext」または「データ バインディングの詳細」を参照してください。For more info see DataContext or Data binding in depth.
TargetNullValueTargetNullValue ソース値が解決されるが、明示的に null である場合に表示する値を設定します。Specifies a value to display when the source value resolves but is explicitly null.
UpdateSourceTriggerUpdateSourceTrigger バインド ソースの更新のタイミングを指定します。Specifies the timing of binding source updates. 指定されていない場合は、既定値は Default です。If unspecified, the default is Default.

  からマークアップを変換する場合 {X:bind}{binding} 、しの既定値の違いを認識する、モードプロパティ。Note  If you're converting markup from {x:Bind} to {Binding}, then be aware of the differences in default values for the Mode property.

コンバーター ConverterLanguage ConverterLanguageの値を変換のシナリオに関連するすべてかから入力しますソースの型またはバインディング ターゲット プロパティと互換性がある値にバインドします。Converter, ConverterLanguage and ConverterLanguage are all related to the scenario of converting a value or type from the binding source into a type or value that is compatible with the binding target property. 例や詳しい情報については、「データ バインディングの詳細」の「データの変換」をご覧ください。For more info and examples, see the "Data conversions" section of Data binding in depth.

注意

Windows 10、バージョン1607 以降では、XAML フレームワークにブール値と Visibility 値のコンバーターが組み込まれています。Starting in Windows 10, version 1607, the XAML framework provides a built in Boolean to Visibility converter. コンバーターは、Visible 列挙値に対して true を、Collapsed に対して false をマッピングします。これにより、コンバーターを作成せずに Visibility プロパティをブール値にバインドできます。The converter maps true to the Visible enumeration value and false to Collapsed so you can bind a Visibility property to a Boolean without creating a converter. 組み込みのコンバーターを使用するには、アプリの最小のターゲット SDK バージョンが 14393 以降である必要があります。To use the built in converter, your app's minimum target SDK version must be 14393 or later. アプリがそれよりも前のバージョンの Windows 10 をターゲットとしている場合は使うことができません。You can't use it when your app targets earlier versions of Windows 10. ターゲット バージョンについて詳しくは、「バージョン アダプティブ コード」をご覧ください。For more info about target versions, see Version adaptive code.

ソース RelativeSource、および ElementName されるため、バインディング ソースの指定相互に排他的です。Source, RelativeSource, and ElementName specify a binding source, so they are mutually exclusive.

ヒント:   などで、値の 1 つの中かっこを指定する必要がある場合パスまたは ConverterParameter 、円記号を付けます:\{します。Tip  If you need to specify a single curly brace for a value, such as in Path or ConverterParameter, then precede it with a backslash: \{. 別の方法として、エスケープする必要がある中かっこを含む文字列全体を ConverterParameter='{Mix}' のように別の種類の引用符で囲みます。Alternatively, enclose the entire string that contains the braces that need escaping in a secondary quotation set, for example ConverterParameter='{Mix}'.

Examples

<!-- 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 番目の例を設定する 4 つ異なるバインドプロパティ。ElementNameパスモードコンバーター.The second example sets four different Binding properties: ElementName, Path, Mode and Converter. Path はここで、Binding プロパティであることが明示的に示された状態で表示されています。Path in this case is shown explicitly named as a Binding property. Path は、データ バインド ソースに評価されます。このデータ バインド ソースは、同じランタイム オブジェクト ツリーにある別のオブジェクト、具体的には sliderValueConverter という名前の Slider です。The Path is evaluated to a data binding source that is another object in the same run-time object tree, a Slider named sliderValueConverter.

Converter プロパティの値が別のマークアップ拡張 {StaticResource} マークアップ拡張 を使っていることに注意してください。つまり、ここでは入れ子になったマークアップ拡張が 2 つ使われています。Note how the Converter property value uses another markup extension, {StaticResource} markup extension, so there are two nested markup extension usages here. 内側のものが最初に評価されます。このため、リソースが取得されると、バインドに使える実用的な IValueConverter (リソースの local:S2Formatter 要素によってインスタンス化されるカスタム クラス) が存在することになります。The inner one is evaluated first, so that once the resource is obtained there's a practical IValueConverter (a custom class that's instantiated by the local:S2Formatter element in resources) that the binding can use.

ツールのサポートTools support

Microsoft Visual Studio の Microsoft IntelliSense では、XAML マークアップ エディターで {Binding} を作成している間、データ コンテキストのプロパティが表示されます。Microsoft IntelliSense in Microsoft Visual Studio displays the properties of the data context while authoring {Binding} in the XAML markup editor. 「{Binding」と入力するとすぐに、Path に適したデータ コンテキスト プロパティがドロップダウンに表示されます。As soon as you type "{Binding", data context properties appropriate for Path are displayed in the dropdown. IntelliSense は、Binding の他のプロパティに関しても役立ちます。IntelliSense also helps with the other properties of Binding. これが機能するためには、マークアップ ページにデータ コンテキストまたは設計時のデータ コンテキストを設定する必要があります。For this to work, you must have either the data context or the design-time data context set in the markup page. [定義へ移動] (F12) は、 {Binding} でも機能します。Go To Definition (F12) also works with {Binding}. または、データ バインディングのダイアログを使うこともできます。Alternatively, you can use the data binding dialog.