新しいx:UWPのバインド機能

画像


拡張機能その他多くのことに加えて、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を返します。



もちろん、制限があります:



ご覧のとおり、XAMLはゆっくりですが開発中です。これは非常に楽しいことです。 RS2およびRS3でも新しいものが追加される可能性があります。 それまでの間、新しいことをゆっくりと学び、不要なコードを取り除くことができます。



Source: https://habr.com/ru/post/J307226/


All Articles