web-dev-qa-db-ja.com

Bindingとx:Bindの違い

UWP、Bindingまたはx:Bindで使用するものと、それらの違いは何ですか?

なぜなら、人々がBindingを使用し、UWPでx:Bindでのみバインドする投稿がたくさんあるからです。

MSDNホームページでは、「{x:Bind}{Binding}によって作成されたバインディングオブジェクトは、機能的にほぼ同等である」としか書かれていません。 x:Bindfasterです。

しかし、それらの違いは何ですか?

「ほぼ機能的に同等」とは同等を意味しないためです。

私の引用からのリンク: [〜#〜] msdn [〜#〜]

だから私の質問は:

UWPでBindingまたはx:Bindを使用する場合の違いは何ですか?

43
SeeuD1

以下はおそらく完全ではありませんが、いくつかの大きな違いは

  • 古いスタイル{Binding }

    • dataContextにバインドします
    • プロパティ名にバインドし、実際のソースタイプについて柔軟に対応します


  • 新しいスタイル {x:Bind }
    • フレームワーク要素(分離コードクラス)にバインドします
    • コンパイル時にすべてのタイプを修正する必要があります
    • デフォルトは、より質素なOneTimeモードになります

ビルド14393以降{x:Bind }サポート:

  • 直接のBooleanToVisibilityバインディング、ValueConverterなし
  • 拡張された関数バインディング
  • 鋳造
  • 辞書インデクサー

新しい{x:Bind}は実行時に少し速くなりますが、同様に重要なことは、誤ったバインディングに対してコンパイラエラーを発生させることです。 {Binding}を使用すると、ほとんどの場合、空のコントロールが表示されます。

47
Henk Holterman

{x:Bind}は、コンパイル時に生成される特別な目的のコードを実行します。 {Binding}は、汎用ランタイムオブジェクト検査を使用します。その結果、{x:Bind}は優れたパフォーマンスを発揮し、バインディング式のコンパイル時の検証を提供します。ページの部分クラスとして生成されるコードファイルにブレークポイントを設定できるようにすることで、デバッグをサポートします。

{x:Bind}は生成されたコードを使用してその利点を実現するため、コンパイル時に型情報が必要です。これは、事前にタイプがわからないプロパティにバインドできないことを意味します。このため、{x:Bind}をObject型のDataContextプロパティと共に使用することはできません。また、実行時に変更される場合があります。 {x:Bind}マークアップ拡張機能(Windows 10の新機能)は、{Binding}の代わりになります。 {x:Bind}には{Binding}の機能の一部が欠けていますが、{Binding}よりも少ない時間と少ないメモリで実行され、より良いデバッグをサポートします。

8
navin rathore