😺
[WPF]忘れがち!ModeとUpdateSourceTrigger
最近、気温が暑かったり寒かったりで大変ですね。僕の自律神経はもうボロボロです。
みなさんの自律神経はいかがですか?
というわけで、(個人的に)忘れがちなWPFのModeとUpdateSourceTriggerについてまとめてみました。
WPFとは?
WPFとは、.NETのGUIフレームワークです。XMLベースのマークアップ言語XAMLでViewを構築し、MVVMを実現するためのデータバインディングをネイティブでサポートしています。
Mode と UpdateSourceTrigger
ModeとUpdateSourceTriggerは、両方とも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の動作例は以下です。
まとめ
本稿では、WPFのModeとUpdateSourceTriggerについてまとめました。このあたりの仕様を忘れると、あれ?なんで変更が反映されないんだ?となってしまうので、WPFを使う際はぜひ覚えておきたいですね。
Discussion