
拡張機能やその他多くのことに加えて、Anniversary Updateはコンパイル済みバインディングの機能を大幅に拡張しました(x:Bind)。 何が変わったのか見てみましょう。
アスタリスク( * )は、新しいSDKを必要とする機能を示します。
コレクション
これで、 {x:Bind Collection[0]}
という形式の構文を使用して、特定のリストアイテムにバインドできます。 さらに、ソースリストがINotifyCollectionChangedを実装し、ModeがOneWayまたはTwoWayに設定されている場合、リストが変更されると(変更がリンクされた要素に影響しない場合でも)バインディングが更新されます。 この機能を使用するには、リストにIList<T>
またはIVector<T>
実装する必要がありIList<T>
。
この構文はリストだけでなく、辞書やMap'ov- {x:Bind Dictionary['Key']}
ます。 確かに、キーの種類は文字列のみです。 リストと同様に、辞書またはマップはIObservableMapを実装してバインディングを更新できます。 文字列文字^は、文字列内の引用符をエスケープするために使用されます。
添付プロパティ
これで、添付プロパティの値にバインドできます。 たとえば、 {x:Bind MyButton.(Grid.Row)}
、MyButtonが配置されている行番号に付加されます。 Attached Propertyが標準の名前空間で宣言されていない場合、目的の名前空間を示す適切なプレフィックスを追加する必要があります。
変換*
従来のバインディングとは異なり、x:Bindは厳密に型指定されており、無効なバインディングはコンパイル時にエラーをスローします。 しかし、ある種類の宣言されたタイプのプロパティにアタッチされていることがありますが、プロパティ自体はより具体的なタイプのオブジェクトです。 また、ベースタイプにないメンバーが後継メンバーであると確信している場合でも、このメンバーにアタッチすることはできません。 この問題を解決するために、1607- {x:Bind ((MyObject) Property).Member}
または{x:Bind Property.(MyObject.Member)}
(最初のオプションを推奨)でキャストの可能性が追加されました。 nullableを通常の型に変換するのにも便利です(例:bool?-> bool)。
BooleanToVisiblityConverter *
今は必要ありません。 ブール値は暗黙的にVisibilityに変換されます。 最後に。
関数のバインド*
これはおそらく、x:Bindの最も強力な新機能です。 これで、関数の戻り値に直接バインドできます。 たとえば、 {x:Bind MyNumber.ToString('F4')}
は、小数点以下4桁のMyNumberを返します。
- 引数として、数値、文字列、ブール値(x:Trueおよびx:False)、null(x:Nul)、およびプロパティへのパスを渡すことができます。 さらに、ModeがOneWayまたはTwoWayに設定されている場合、引数が変更されるとバインディングが更新されます。
:.
表記を使用して静的メソッドにバインドすることもできます:.
。- TwoWayバインディングを使用するには、BindBackを指定する必要があります。 この関数は、ユーザーインターフェイスの値が変更されたときに呼び出され、1つの引数(新しい値)を取る必要があります。 例-
{x:Bind MyFunction(MyProperty), BindBack=Update}
もちろん、制限があります:
- 関数は呼び出し場所で利用可能でなければなりません。
- オーバーロードは、引数のタイプではなく、数に従って実行されます。 つまり、適切な数の引数を持つ最初の関数が選択されます。
- 送信されたタイプは、受信されたタイプと正確に一致する必要があります。
- 返される型は、バインド先のプロパティの値と正確に一致する必要があります。
ご覧のとおり、XAMLはゆっくりですが開発中です。これは非常に楽しいことです。 RS2およびRS3でも新しいものが追加される可能性があります。 それまでの間、新しいことをゆっくりと学び、不要なコードを取り除くことができます。