😺

[WPF]忘れがち!ModeとUpdateSourceTrigger

2022/03/24に公開

最近、気温が暑かったり寒かったりで大変ですね。僕の自律神経はもうボロボロです。
みなさんの自律神経はいかがですか?
というわけで、(個人的に)忘れがちなWPFのModeとUpdateSourceTriggerについてまとめてみました。

WPFとは?

WPFとは、.NETのGUIフレームワークです。XMLベースのマークアップ言語XAMLでViewを構築し、MVVMを実現するためのデータバインディングをネイティブでサポートしています。

Mode と UpdateSourceTrigger

ModeUpdateSourceTriggerは、両方ともWPFでデータバインディングを行う際の設定値で、それぞれバインドの方向と、バインディング・ターゲットからバインディング・ソースへの更新タイミングを示しています。それぞれのプロパティは、以下の種類があります。

Mode

  • Default
    • デフォルト値。バインディングのターゲットによって異なり、下記のOneWayかTwoWayのいずれか一方をとる。TextBoxやCheckBoxなどが持つユーザ操作を受け取るプロパティはTwoWayで、それ以外のプロパティはOneWay。
  • OneTime
    • アプリケーション起動時、あるいはデータコンテキストが切り替わったときのみデータを反映。
  • OneWay
    • バインディング・ソースのデータが変更されるとバインディング・ターゲットの値を更新。
  • OneWayToSource
    • OneWayの逆方向。バインディング・ターゲットのデータが変更されるとバインディング・ソースの値を更新。
  • TwoWay
    • バインディング・ソースとバインディング・ターゲットは双方向にデータを更新。
      したがって、ソース/ターゲット間の関係は次のようになります。
      ソース/ターゲット間の関係の画像


UpdateSourceTrigger

  • Default
    • デフォルト値。バインディングのターゲットによって異なり、多くのプロパティはPropertyChangedだが、唯一TextプロパティのみLostFocusをデフォルト値に持つ。
  • Explicit
    • UpdateSource()メソッドを呼んだときのみ反映。
  • LostFocus
    • バインディング・ターゲットのコントロールがフォーカスを失ったときに反映。
  • PropertyChanged
    • バインディング・ターゲットのプロパティ値が変更されたら即座に反映。

動作の様子

ModeとUpdateSourceTriggerの動作例は以下です。
ModeAndUpdateSourceTrigger.gif

まとめ

本稿では、WPFのModeとUpdateSourceTriggerについてまとめました。このあたりの仕様を忘れると、あれ?なんで変更が反映されないんだ?となってしまうので、WPFを使う際はぜひ覚えておきたいですね。

参考資料

Discussion