{x:Bind} マークアップ拡張{x:Bind} markup extension

{x:Bind} によりアプリでデータ バインディングを使う方法に関する一般的な情報 (および {x:Bind}{Binding} の全体的な比較) については、「データ バインディングの詳細」をご覧ください。Note For general info about using data binding in your app with {x:Bind} (and for an all-up comparison between {x:Bind} and {Binding}), see Data binding in depth.

Windows 10 では、{Binding} に代わり、{x:Bind} マークアップ拡張が新たに提供されています。The {x:Bind} markup extension—new for Windows 10—is an alternative to {Binding}. {x:Bind} では、{Binding} の機能のいくつかが省略されていますが、{Binding} よりも短い時間および少ないメモリで動作し、より適切なデバッグをサポートしています。{x:Bind} lacks some of the features of {Binding}, but it runs in less time and less memory than {Binding} and supports better debugging.

XAML のコンパイル時に、{x:Bind} は、データ ソースのプロパティから値を取得してマークアップで指定されたプロパティに設定するコードに変換されます。At XAML compile time, {x:Bind} is converted into code that will get a value from a property on a data source, and set it on the property specified in markup. 必要な場合、バインディング オブジェクトは、データ ソース プロパティの値の変化を監視し、その変化に基づいて自分自身を更新するように構成できます (Mode="OneWay")。The binding object can optionally be configured to observe changes in the value of the data source property and refresh itself based on those changes (Mode="OneWay"). また、その独自の値の変化をソース プロパティにプッシュするように構成することもできます (Mode="TwoWay")。It can also optionally be configured to push changes in its own value back to the source property (Mode="TwoWay").

{x:Bind}{Binding} によって作成されたバインディング オブジェクトは、ほとんど機能的に同等です。The binding objects created by {x:Bind} and {Binding} are largely functionally equivalent. ただし、{x:Bind} は、コンパイル時に生成される特定用途のコードを実行し、{Binding} は、汎用的なランタイム オブジェクト検査を実行します。But {x:Bind} executes special-purpose code, which it generates at compile-time, and {Binding} uses general-purpose runtime object inspection. したがって、{x:Bind} バインディング (多くの場合、コンパイル済みバインドと呼ばれます) はパフォーマンスが高く、コンパイル時にバインド式を検証したり、ページの部分クラスとして生成されたコード ファイル内にブレークポイントを設定し、デバッグを行ったりできます。Consequently, {x:Bind} bindings (often referred-to as compiled bindings) have great performance, provide compile-time validation of your binding expressions, and support debugging by enabling you to set breakpoints in the code files that are generated as the partial class for your page. これらのファイルは obj フォルダー内にあり、<view name>.g.cs (C# の場合) などの名前が付けられています。These files can be found in your obj folder, with names like (for C#) <view name>.g.cs.

ヒント

{Binding} の既定のモードは OneWay ですが、{x:Bind} の既定のモードは OneTime です。{x:Bind} has a default mode of OneTime, unlike {Binding}, which has a default mode of OneWay. これはパフォーマンス上の理由から選ばれました。OneWay を使うと、接続して変更検出を処理するために生成されるコードが多くなるためです。This was chosen for performance reasons, as using OneWay causes more code to be generated to hookup and handle change detection. OneWay または TwoWay バインディングを使うようにモードを明示的に指定することができます。You can explicitly specify a mode to use OneWay or TwoWay binding. x:DefaultBindMode を使って、マークアップ ツリーの特定のセグメントで {x:Bind} の既定のモードを変更することもできます。You can also use x:DefaultBindMode to change the default mode for {x:Bind} for a specific segment of the markup tree. 指定されたモードは、バインドの一部として明示的にモードが指定されている場合を除いて、対象の要素とその子に対するすべての {x:Bind} 式に適用されます。The specified mode applies to any {x:Bind} expressions on that element and its children, that do not explicitly specify a mode as part of the binding.

{x:Bind} の使い方を示すサンプル アプリSample apps that demonstrate {x:Bind}

XAML 属性の使用方法XAML attribute usage

<object property="{x:Bind}" .../>
-or-
<object property="{x:Bind propertyPath}" .../>
-or-
<object property="{x:Bind bindingProperties}" .../>
-or-
<object property="{x:Bind 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=value[, propName=value]*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. 引数の構文は、設定されているプロパティによって異なります。The syntax of the argument depends on the property being set. 値がそれ自体マークアップ拡張である propName=value の使用例を示します: Converter={StaticResource myConverterClass}Here's an example of a propName=value usage where the value is itself a markup extension: Converter={StaticResource myConverterClass}. 詳しくは、以下の「{x:Bind} で設定できるプロパティ」をご覧ください。For more info, see Properties that you can set with {x:Bind} section below.

プロパティ パスProperty path

PropertyPath{x:Bind} 式の Path です。PropertyPath sets the Path for an {x:Bind} expression. Path は、バインディング先のプロパティ、サブプロパティ、フィールド、またはメソッドの値 (ソース) を指定するプロパティ パスです。Path is a property path specifying the value of the property, sub-property, field, or method that you're binding to (the source). Path プロパティの名前は、{Binding Path=...} のように明示的に指定することができます。You can mention the name of the Path property explicitly: {Binding Path=...}. または、{Binding ...} のように省略することもできます。Or you can omit it: {Binding ...}.

プロパティのパスの解決Property path resolution

{x:Bind} は、既定のソースとして DataContext を使わず、代わりにページまたはユーザー コントロール自体を使います。{x:Bind} does not use the DataContext as a default source—instead, it uses the page or user control itself. したがって、ページまたはユーザー コントロールのコード ビハインドでプロパティ、フィールド、およびメソッドが検索されます。So it will look in the code-behind of your page or user control for properties, fields, and methods. 通常、ビュー モデルを {x:Bind} に公開するには、ページまたはユーザー コントロールのコード ビハインドに新しいフィールドまたはプロパティを追加する必要があります。To expose your view model to {x:Bind}, you will typically want to add new fields or properties to the code behind for your page or user control. プロパティ パスのステップは、ドット (.) で区切ります。複数の区切り記号を指定することで、連続するサブプロパティを走査できます。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.

たとえば、あるページで、Text="{x:Bind Employee.FirstName}" を指定すると、そのページの Employee メンバーが検索され、次に、Employee が返したオブジェクトの FirstName メンバーが検索されます。For example: in a page, Text="{x:Bind Employee.FirstName}" will look for an Employee member on the page and then a FirstName member on the object returned by Employee. 従業員の扶養家族を含むプロパティに項目コントロールをバインドする場合、プロパティ パスは "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".

C++/CX の場合、{x:Bind} はページまたはデータ モデルのプライベート フィールドおよびプロパティにバインドできません。バインドできるようにするには、パブリック プロパティが必要です。For C++/CX, {x:Bind} cannot bind to private fields and properties in the page or data model – you will need to have a public property for it to be bindable. バインディング用のサーフェス領域を CX クラス/インターフェイスとして公開し、関連するメタデータを取得できるようにする必要があります。The surface area for binding needs to be exposed as CX classes/interfaces so that we can get the relevant metadata. [Bindable] 属性は必要ありません。The [Bindable] attribute should not be needed.

x:Bind では、ElementName=xxx をバインド式の一部として使用する必要はありません。With x:Bind, you do not need to use ElementName=xxx as part of the binding expression. x:Bind では、要素の名前をバインディングのパスの先頭部分として使用できません。これは、名前付き要素が、ルート バインディング ソースを表すページまたはユーザー コントロール内のフィールドになるためです。With x:Bind, you can use the name of the element as the first part of the path for the binding because named elements become fields within the page or user control that represents the root binding source

コレクションCollections

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

インデクサーを使うには、インデックス化されるプロパティの型に基づいて、モデルで IList<T> または IVector<T> を実装する必要があります。To use an indexer, the model needs to implement IList<T> or IVector<T> on the type of the property that is going to be indexed. インデックス付きプロパティの型が INotifyCollectionChanged または IObservableVector をサポートしており、バインディングが OneWay または TwoWay の場合、そのプロパティは登録され、それらのインターフェイスで変更通知をリッスンします。If the type of the indexed property supports INotifyCollectionChanged or IObservableVector and the binding is OneWay or TwoWay, then it will register and listen for change notifications on those interfaces. 変更検出ロジックは、特定のインデックス付きの値に影響を与えない場合でも、すべてのコレクションの変更に基づいて更新されます。The change detection logic will update based on all collection changes, even if that doesn’t affect the specific indexed value. これは、リッスンしているロジックがコレクションのすべてのインスタンス間で共通であるためです。This is because the listening logic is common across all instances of the collection.

データ ソースがディクショナリまたはマップである場合、プロパティ パスには、文字列名によりコレクション内の項目を指定できます。If the data source is a Dictionary or Map, then a property path can specify items in the collection by their string name. たとえば、<TextBlock Text="{x:Bind Players['John Smith']" /> は、ディクショナリで "John Smith" という名前の項目を検索します。For example <TextBlock Text="{x:Bind Players['John Smith']" /> will look for an item in the dictionary named "John Smith". 名前は引用符で囲む必要があり、単一引用符と二重引用符のどちらでも使用できます。The name needs to be enclosed in quotes, and either single or double quotes can be used. 文字列で引用符をエスケープするにはハット (^) を使用できます。Hat (^) can be used to escape quotes in strings. XAML 属性に使用されるものから代替引用符を使用するのが最も簡単です。Its usually easiest to use alternate quotes from those used for the XAML attribute.

文字列インデクサーを使うには、インデックス化されるプロパティの型に基づいて、モデルで IDictionary<string, T> または IMap<string, T> を実装する必要があります。To use an string indexer, the model needs to implement IDictionary<string, T> or IMap<string, T> on the type of the property that is going to be indexed. インデックス付きプロパティの型が IObservableMap をサポートしており、バインディングが OneWay または TwoWay の場合、そのプロパティは登録され、それらのインターフェイスで変更通知をリッスンします。If the type of the indexed property supports IObservableMap and the binding is OneWay or TwoWay, then it will register and listen for change notifications on those interfaces. 変更検出ロジックは、特定のインデックス付きの値に影響を与えない場合でも、すべてのコレクションの変更に基づいて更新されます。The change detection logic will update based on all collection changes, even if that doesn’t affect the specific indexed value. これは、リッスンしているロジックがコレクションのすべてのインスタンス間で共通であるためです。This is because the listening logic is common across all instances of the collection.

添付プロパティAttached Properties

添付プロパティにバインドするには、クラスおよびプロパティ名をドットの後のかっこ内に含める必要があります。To bind to attached properties, you need to put the class and property name into parentheses after the dot. たとえば、Text="{x:Bind Button22.(Grid.Row)}" などです。For example Text="{x:Bind Button22.(Grid.Row)}". プロパティが Xaml 名前空間で宣言されていない場合は、そのプロパティの前に xml 名前空間を付ける必要があります。これはドキュメントの先頭でコード名前空間にマップする必要があります。If the property is not declared in a Xaml namespace, then you will need to prefix it with a xml namespace, which you should map to a code namespace at the head of the document.

キャストCasting

コンパイル済みのバインドは、厳密に型指定され、パスの各ステップの型を解決します。Compiled bindings are strongly typed, and will resolve the type of each step in a path. 返される型にメンバーがない場合は、コンパイル時に失敗します。If the type returned doesn’t have the member, it will fail at compile time. キャストを指定して、オブジェクトの実際の型をバインディングに通知することができます。You can specify a cast to tell binding the real type of the object. 次の場合、obj は型オブジェクトのプロパティですが、テキスト ボックスを含んでいます。したがって、Text="{x:Bind ((TextBox)obj).Text}" または Text="{x:Bind obj.(TextBox.Text)}" を使用できます。In the following case, obj is a property of type object, but contains a text box, so we can use either Text="{x:Bind ((TextBox)obj).Text}" or Text="{x:Bind obj.(TextBox.Text)}". groups3 field in Text="{x:Bind ((data:SampleDataGroup)groups3[0]).Title}"groups3 フィールドは、オブジェクトのディクショナリです。したがって、data:SampleDataGroup にキャストする必要があります。The groups3 field in Text="{x:Bind ((data:SampleDataGroup)groups3[0]).Title}" is a dictionary of objects, so you must cast it to data:SampleDataGroup. 既定の XAML 名前空間の一部ではないコード名前空間にオブジェクトの型をマップするための xml data: 名前空間のプレフィックスの使用法に注意してください。Note the use of the xml data: namespace prefix for mapping the object type to a code namespace that isn't part of the default XAML namespace.

注: C# スタイルのキャスト構文は添付プロパティ構文より柔軟であり、今後はこの構文が推奨されます。Note: The C#-style cast syntax is more flexible than the attached property syntax, and is the recommended syntax going forward.

バインディング パス内の関数Functions in binding paths

Windows 10 バージョン 1607 以降、{x:Bind} はバインド パスのリーフ ステップとしての関数の使用をサポートします。Starting in Windows 10, version 1607, {x:Bind} supports using a function as the leaf step of the binding path. これにより次のことが可能になります。This enables

  • 値の変換を実現するためのより簡単な方法A simpler way to achieve value conversion
  • 複数のパラメーターに依存するようにバインディングする方法A way for bindings to depend on more than one parameter

注意

{x:Bind} で関数を使うには、アプリの対象が SDK バージョン 14393 以降である必要があります。To use functions with {x:Bind}, your app's minimum target SDK version must be 14393 or later. アプリがそれよりも前のバージョンの Windows 10 を対象としている場合は、関数を使えません。You can't use functions when your app targets earlier versions of Windows 10. ターゲット バージョンについて詳しくは、「バージョン アダプティブ コード」をご覧ください。For more info about target versions, see Version adaptive code.

次の例では、項目の背景と前景が、Color パラメーターに基づいて変換を行うために関数にバインドされています。In the following example, the background and foreground of the item are bound to functions to do conversion based on the color parameter

<DataTemplate x:DataType="local:ColorEntry">
    <Grid Background="{x:Bind local:ColorEntry.Brushify(Color)}" Width="240">
        <TextBlock Text="{x:Bind ColorName}" Foreground="{x:Bind TextColor(Color)}" Margin="10,5" />
    </Grid>
</DataTemplate>
class ColorEntry
{
    public string ColorName { get; set; }
    public Color Color { get; set; }

    public static SolidColorBrush Brushify(Color c)
    {
        return new SolidColorBrush(c);
    }

    public SolidColorBrush TextColor(Color c)
    {
        return new SolidColorBrush(((c.R * 0.299 + c.G * 0.587 + c.B * 0.114) > 150) ? Colors.Black : Colors.White);
    }
}

関数の構文Function Syntax

Text="{x:Bind MyModel.Order.CalculateShipping(MyModel.Order.Weight, MyModel.Order.ShipAddr.Zip, 'Contoso'), Mode=OneTime}"
             |      Path to function         |    Path argument   |       Path argument       | Const arg |  Bind Props

関数へのパスPath to the function

関数へのパスは、他のプロパティ パスと同じように指定され、関数を見つけるためにドット (.)、インデクサー、またはキャストを含めることができます。The path to the function is specified like other property paths and can include dots (.), indexers or casts to locate the function.

静的関数は、XMLNamespace:ClassName.MethodName 構文を使って指定できます。Static functions can be specified using XMLNamespace:ClassName.MethodName syntax. たとえば、ページの先頭で xmlns:sys="using:System" が指定されているものとすると、<CalendarDatePicker Date="{x:Bind sys:DateTime.Parse(TextBlock1.Text)}" /> は DateTime.Parse 関数にマップします。For example <CalendarDatePicker Date="{x:Bind sys:DateTime.Parse(TextBlock1.Text)}" /> will map to the DateTime.Parse function, assuming that xmlns:sys="using:System" is specified on the top of the page.

モードが OneWay/TwoWay である場合、関数のパスでは変更の検出が実行され、それらのオブジェクトに変更があるとバインディングが再評価されます。If the mode is OneWay/TwoWay, then the function path will have change detection performed on it, and the binding will be re-evaluated if there are changes to those objects.

バインディングされる関数には以下のことが要求されます。The function being bound to needs to:

  • コードとメタデータにアクセスできる必要があります。したがって、C# では internal/private を使用できますが、C++/CX ではメソッドをパブリック WinRT メソッドにする必要があります。Be accessible to the code and metadata – so internal / private work in C#, but C++/CX will need methods to be public WinRT methods
  • オーバーロードは引数の型ではなく数に基づき、同じ数の引数を持つ最初のオーバーロードとの一致が試みられます。Overloading is based on the number of arguments, not type, and it will try to match to the first overload with that many arguments
  • 引数の型は渡されるデータと一致する必要があります。縮小変換は行われません。The argument types need to match the data being passed in – we don’t do narrowing conversions
  • 関数の戻り値の型は、バインディングを使用しているプロパティの型と一致する必要があります。The return type of the function needs to match the type of the property that is using the binding

関数の引数Function arguments

複数の関数引数をコンマ (,) で区切って指定できます。Multiple function arguments can be specified, separated by comma's (,)

  • バインディング パス – そのオブジェクトにバインドする場合と同じ構文です。Binding Path – Same syntax as if you were binding directly to that object.
    • モードが OneWay/TwoWay の場合は、変更検出が実行されて、オブジェクトが変化するとバインディングが再評価されます。If the mode is OneWay/TwoWay then change detection will be performed and the binding re-evaluated upon object changes
  • 引用符で囲まれた定数文字列 – 文字列として指定するには引用符が必要です。Constant string enclosed in quotes – quotes are needed to designate it as a string. 文字列で引用符をエスケープするにはハット (^) を使用できますHat (^) can be used to escape quotes in strings
  • 定数 - たとえば -123.456Constant Number - for example -123.456
  • ブール値 – "x:True" または "x:False" と指定しますBoolean – specified as "x:True" or "x:False"

双方向の関数バインドTwo way function bindings

双方向のバインディング シナリオでは、逆方向のバインドのために第 2 の関数を指定する必要があります。In a two-way binding scenario, a second function must be specified for the reverse direction of the binding. これは、BindBack バインド プロパティを使って行います (例: Text="{x:Bind a.MyFunc(b), BindBack=a.MyFunc2}")。This is done using the BindBack binding property, for example Text="{x:Bind a.MyFunc(b), BindBack=a.MyFunc2}". 関数が受け取る必要のある引数は 1 つで、モデルにプッシュバックする必要のある値です。The function should take one argument which is the value that needs to be pushed back to the model.

イベント バインディングEvent Binding

イベント バインディングは、コンパイル済みのバインドの固有の機能です。Event binding is a unique feature for compiled binding. これにより、バインディングを使用するイベントのハンドラーを指定でき、それをコード ビハインドのメソッドにする必要はありません。It enables you to specify the handler for an event using a binding, rather than it having to be a method on the code behind. たとえば、Click="{x:Bind rootFrame.GoForward}" などです。For example: Click="{x:Bind rootFrame.GoForward}".

イベントの場合、対象のメソッドをオーバーロードしてはならず、以下の条件も満たしている必要があります。For events, the target method must not be overloaded and must also:

  • イベントのシグネチャが一致している。Match the signature of the event.
  • または、パラメーターを持たない。OR have no parameters.
  • または、イベント パラメーターの型から割り当て可能な型のパラメーターを同じ数だけ持つ。OR have the same number of parameters of types that are assignable from the types of the event parameters.

生成されたコード ビハインドでは、コンパイル済みのバインドは、イベントを処理してモデルのメソッドにルーティングします。また、イベントが発生すると、バインド式のパスを評価します。In generated code-behind, compiled binding handles the event and routes it to the method on the model, evaluating the path of the binding expression when the event occurs. つまり、プロパティ バインディングとは異なり、モデルの変更を追跡しません。This means that, unlike property bindings, it doesn’t track changes to the model.

プロパティ パスの文字列構文について詳しくは、ここで説明した {x:Bind} に対する違いに注意して、「プロパティ パス構文」をご覧ください。For more info about the string syntax for a property path, see Property-path syntax, keeping in mind the differences described here for {x:Bind}.

{x:Bind} で設定できるプロパティProperties that you can set with {x:Bind}

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

これらのプロパティは、Binding クラスのプロパティとほぼ同じように機能します。These properties work in much the same way as the properties of the Binding class.

プロパティProperty 説明Description
PathPath 上記の「プロパティ パス」をご覧ください。See the Property path section above.
ConverterConverter バインド エンジンによって呼び出されるコンバーター オブジェクトを指定します。Specifies the converter object that is called by the binding engine. コンバーターは XAML で設定できますが、リソース ディクショナリ内のオブジェクトへの {StaticResource} マークアップ拡張 参照で割り当てたオブジェクト インスタンスを参照する場合に限られます。The converter can be set in XAML, but only if you refer to an object instance that you've assigned in a {StaticResource} markup extension reference to that object in the resource dictionary.
ConverterLanguageConverterLanguage コンバーターで使うカルチャを指定します Specifies the culture to be used by the converter. (ConverterLanguage を設定する場合は Converter も設定する必要があります)。カルチャは、標準ベースの識別子として設定できます。(If you're setting ConverterLanguage you should also be setting Converter.) The culture is set as a standards-based identifier. 詳しくは、「ConverterLanguage」をご覧ください。For more info, see ConverterLanguage.
ConverterParameterConverterParameter コンバーター ロジックで使うことができるコンバーター パラメーターを指定します Specifies the converter parameter that can be used in converter logic. (ConverterParameter を設定する場合は Converter も設定する必要があります)。 ほとんどのコンバーターは、渡された値から変換に必要なすべての情報を取得するという単純なロジックを使っており、ConverterParameter 値を必要としません。(If you're setting ConverterParameter you should also be 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 moderately advanced converter implementations that have more than one 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.
FallbackValueFallbackValue ソースまたはパスを解決できない場合に表示する値を指定します。Specifies a value to display when the source or path cannot be resolved.
ModeMode "OneTime"、"OneWay"、"TwoWay" のいずれかの文字列として、バインド モードを指定します。Specifies the binding mode, as one of these strings: "OneTime", "OneWay", or "TwoWay". 既定は "OneTime" です。The default is "OneTime". これは、{Binding} の既定値 (ほとんどの場合は "OneWay") とは異なる点に注意してください。Note that this differs from the default for {Binding}, which is "OneWay" in most cases.
TargetNullValueTargetNullValue ソース値が解決されるが、明示的に null である場合に表示する値を設定します。Specifies a value to display when the source value resolves but is explicitly null.
BindBackBindBack 双方向バインディングの逆方向に使う関数を指定します。Specifies a function to use for the reverse direction of a two-way binding.
UpdateSourceTriggerUpdateSourceTrigger コントロールから双方向バインディングのモデルに変更を戻すタイミングを指定します。Specifies when to push changes back from the control to the model in TwoWay bindings. TextBox.Text を除くすべてのプロパティの既定値は PropertyChanged です。TextBox.Text の既定値は LostFocus です。The default for all properties except TextBox.Text is PropertyChanged, TextBox.Text is LostFocus.

注意

マークアップを {Binding} から {x:Bind} に変換する場合は、Mode プロパティの既定値の違いに注意してください。If you're converting markup from {Binding} to {x:Bind}, then be aware of the differences in default values for the Mode property.

マークアップ ツリーの特定のセグメントで x:Bind の既定のモードを変更するには、x:DefaultBindMode を使用できます。x:DefaultBindMode can be used to change the default mode for x:Bind for a specific segment of the markup tree. 選択されたモードは、バインドの一部として明示的にモードが指定されている場合を除いて、対象の要素とその子に対するすべての x:Bind 式に適用されます。The mode selected will apply any x:Bind expressions on that element and its children, that do not explicitly specify a mode as part of the binding. OneTime は、OneWay より重要です。OneWay を使うと、接続して変更検出を処理するために生成されるコードが多くなるためです。OneTime is more performant than OneWay as using OneWay will cause more code to be generated to hookup and handle the change detection.

注釈Remarks

{x:Bind} は、その利点を得るために、生成されたコードを使用するので、コンパイル時に型情報が必要です。Because {x:Bind} uses generated code to achieve its benefits, it requires type information at compile time. つまり、型が事前にわかっていない場合は、プロパティにバインドできません。This means that you cannot bind to properties where you do not know the type ahead of time. このため、{x:Bind} は、型が Object で、実行時に変更されることもある DataContext プロパティと共に使用することはできません。Because of this, you cannot use {x:Bind} with the DataContext property, which is of type Object, and is also subject to change at run time.

{x:Bind} をデータ テンプレートと共に使用するときは、以下の例に示すように x:DataType 値を設定し、バインド先の型を指定する必要があります。When using {x:Bind} with data templates, you must indicate the type being bound to by setting an x:DataType value, as shown in the example below. 型をインターフェイスまたは基底クラス型に設定することもでき、完全な式を指定するために必要な場合は、キャストを使用できます。You can also set the type to an interface or base class type, and then use casts if necessary to formulate a full expression.

コンパイル済みバインドは、コード生成によって異なります。Compiled bindings depend on code generation. そのため、リソース ディクショナリで {x:Bind} を使う場合、リソース ディクショナリにはコード ビハインド クラスが必要です。So if you use {x:Bind} in a resource dictionary then the resource dictionary needs to have a code-behind class. コード例については、「リソース ディクショナリと {x:Bind}」をご覧ください。See Resource dictionaries with {x:Bind} for a code example.

コンパイル済みバインドを含むページやユーザー コントロールでは、生成されたコードに "Bindings" プロパティが含まれます。Pages and user controls that include Compiled bindings will have a "Bindings" property in the generated code. これには次のメソッドが含まれます。This includes the following methods:

  • Update() - すべてのコンパイル済みバインドの値を更新します。Update() - This will update the values of all compiled bindings. すべての 1 方向/双方向バインディングには、変更を検出するためにフックされたリスナーがあります。Any one-way/Two-Way bindings will have the listeners hooked up to detect changes.
  • Initialize() - バインディングがまだ初期化されていない場合、Update() を呼び出してバインディングを初期化します。Initialize() - If the bindings have not already been initialized, then it will call Update() to initialize the bindings
  • StopTracking() - 1 方向と双方向のバインディングに作成されたすべてのリスナーをフック解除します。StopTracking() - This will unhook all listeners created for one-way and two-way bindings. Update() メソッドを使って再初期化できます。They can be re-initialized using the Update() method.

注意

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. これは、関数バインドの機能ではないことに注意してください。プロパティのバインドにすぎません。Note that this is not a feature of function binding, only property binding. 組み込みのコンバーターを使用するには、アプリの最小のターゲット 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.

ヒント: PathConverterParameter のように、値に 1 つの中かっこを指定する必要がある場合は、\{ のように円記号 (バックスラッシュ) を中かっこの前に付けます。Tip If you need to specify a single curly brace for a value, such as in Path or ConverterParameter, 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}'.

ConverterConverterLanguageConverterLanguage はいずれも、バインド ソースの値または型を、バインディング ターゲットのプロパティと互換性のある型または値に変換するシナリオに関係があります。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.

{x:Bind} は、マークアップ拡張のみです。このようなバインディングをプログラムで作成したり操作したりする方法はありません。{x:Bind} is a markup extension only, with no way to create or manipulate such bindings programmatically. マークアップ拡張について詳しくは、「XAML の概要」をご覧ください。For more info about markup extensions, see XAML overview.

Examples

<Page x:Class="QuizGame.View.HostView" ... >
    <Button Content="{x:Bind Path=ViewModel.NextButtonText, Mode=OneWay}" ... />
</Page>

この例の XAML では、{x:Bind}ListView.ItemTemplate プロパティと共に使用されています。This example XAML uses {x:Bind} with a ListView.ItemTemplate property. x:DataType 値の宣言に注意してください。Note the declaration of an x:DataType value.

  <DataTemplate x:Key="SimpleItemTemplate" x:DataType="data:SampleDataGroup">
    <StackPanel Orientation="Vertical" Height="50">
      <TextBlock Text="{x:Bind Title}"/>
      <TextBlock Text="{x:Bind Description}"/>
    </StackPanel>
  </DataTemplate>