さまざまなWPFバインディングモードとは何ですか?


89

次のようなWPFのさまざまなデータバインディングモードを理解していません。

  • 一方通行
  • 双方向
  • 一度
  • 等...

これらの各モードはどういう意味ですか?

それらはいつ使用されるべきですか?

回答:


162
  • OneWay:バインドされたプロパティでユーザーインターフェイスを更新する場合に使用します。
  • TwoWay:これは、組み合わせた場合と同じ動作をOneWayOneWayToSourceます。バインドされたプロパティはユーザーインターフェイスを更新し、ユーザーインターフェイスの変更はバインドされたプロパティを更新します(たとえば、TextBoxまたはでこれを使用しCheckboxます)。
  • OneTime:これは、OneWayユーザーインターフェイスを1回だけ更新することを除いて、同じ動作をします。これはバインディングのデフォルトの選択である必要があります(さまざまな理由でここでは詳しく説明しません)。実際に追加機能が必要な場合にのみ、他のタイプのバインディングを使用する必要があります。
  • OneWayToSource:これは逆ですOneWay-ユーザーインターフェイスの値の変更により、バインドされたプロパティが更新されます。

何も指定しない場合、動作は使用しているコントロールによって異なります。

詳細についてはBindingMode、MSDNの列挙型を参照してください。


ありがとう。それは役に立ちます...しかし、plzはTwoWayの例を指定します...私はそれがコードビハインドをどのように反映しているか知りたいです。
DATT OZA 2010

2
@DATT:「指定する」とはどういう意味ですか?基本的に、XAMLでMode = TwoWayを設定した場合、GUI値を変更すると、C#プロパティが自動的に更新されます。ただし、コードビハインドのプロパティは、INotifyPropertyChangedインターフェイスを実装するクラス(ViewModelなど)に実装する必要があります。コードビハインドがsetを介してプロパティの値を変更する場合、PropertyChangedを呼び出して、GUIに値の変更が通知されるようにする必要があります。これにより、GUIは自動的に更新されます。
デイブ

1
何も指定しない場合、動作は使用しているプロパティによって異なります。
マウロサンピエトロ2016年

39

バインディングは、次の2つのエンティティで構成されます。

  1. ソース(通常、MVVMシナリオのViewModel)
  2. ターゲット(UIコントロール)

ターゲットはDependencyObject(バインドが機能するため)DependencyObjectである必要があり、ソースはのいずれかであるか、変更されたことについてWPFバインディングシステムを模倣するメカニズム(実装INotifyPropetyChnagedインターフェイス)を備えている必要があります。


MVVMは、ViewModelプロジェクトにView関連の参照がないことを推奨しINotifyPropertyChangedているため、インターフェイスを使用して、ソースオブジェクトがWPFバインディングによって認識されるようにすることをお勧めします。SourceのプロパティとTargetのプロパティの間でバインドが発生します(である必要がありますDependencyProperty)。たとえばTextPropertyTextBoxクラスのはUserName、ビューモデルの(たとえば)プロパティへのDataBoundです。WPFバインディングには、4種類のバインディングがあります。特に指定しない限り、バインディングはUIスレッドで実行されることに注意してください。

  1. OneWayターゲットプロパティは、変更されているソースプロパティをリッスンし、それ自体を更新します。ViewwModelのUserNameプロパティをプログラムで変更すると、テキストボックスに反映されます。バインディングシステムはソースのみの変更を監視するため、これは中程度のコストです。
  2. TwoWay:ターゲットプロパティは、変更されるソースプロパティをリッスンし、それ自体を更新します。ANDソースプロパティは、変更されるターゲットプロパティをリッスンし、それ自体を更新します。TextPropertyUserNameプロパティの両方が同期されたままになり、一方が変更されると相互に更新されます。バインディングシステムは両側の変更を監視する必要があるため、これは最もコストがかかります。
  3. OneWayToSource:ターゲットプロパティが変更されると、ソースプロパティが変更されます。ユーザーが変更した場合TextPropertyと、UserNameプロパティは変更された値を取得します。バインディングシステムはターゲットのみの変更を監視するため、これも中程度のコストです。
  4. OneTime:これはBindingの存続期間中に1回だけ発生し、Bindingが発生するとTargetプロパティがSourceプロパティで更新されます。これは最も高価であり、あなたは例えば示される静的なデータを持っているシナリオのために賢明であるLabelTextBlockなど

何も言及しない場合、すべてのターゲットプロパティには、それ自体に関連付けられたデフォルトのバインディングモードがあります。たとえば、TextPropertyTextBoxデフォルトのバインディングモードはですTwoWay。以下のためTextPropertyTextBlockそれは1つの方法です。

特にUIに多数のコントロールがある場合は、アプリケーションの待ち時間を短縮するのに役立つため、適切なモードを選択することをお勧めします。

MVVMの詳細については、私が書いた記事をご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.