同じデータを複数のビューから参照し、データが変更されたら、紐づいたビューが一気に更新されるような機構をデータバインディングという。
第5回 WPFの「データ・バインディング」を理解する (1/3):連載:WPF入門 - @IT
MVVMをやる上でこれは欠かせないが、C言語やC++はデータバインディングを持たないので、C++で疑似的なデータバインディングを、
Win32APIアプリケーションでデータバインディングしてみる - Qiita
を参考につくってみた。
今回、実装は大変複雑なので割愛して、どんなものかという実験だけ・・・。
class_input_formが入力フォームのコントロールだとする。
class_binding_variableが入力フォームと紐づける変数。
基本的には文字列を持っていて、文字列をセットするセッターや取得するゲッターなども指定されている。
初期化で"ABC"を持つ。
一方、入力フォームはform1が"hoge"、form2が"foo"、form3が"bar"を持つ。
それぞれのフォームの値を出力。
form2に"AAA"をセットして、またそれぞれ出力。
binding_strと各formをbindし、また値をそれぞれ出力。
form3に"BBB"をセットして、また値を出力。
form1に"CCC"をセットして、また出力。
実行すると、
$ ls binder.h binding_variable.h comparator.h getter.h input_form.h key_binder.h main main.cpp mediator.h member.h setter.h $ g++ main.cpp -o main $ ./main value_ = hoge value_ = foo value_ = bar ----- value_ = hoge value_ = AAA value_ = bar ----- value_ = ABC value_ = ABC value_ = ABC ----- value_ = BBB value_ = BBB value_ = BBB ----- value_ = CCC value_ = CCC value_ = CCC $
"AAA"をセットした時は、まだbindされてないので、form2しか変わらない。
しかし、bindされた後は、binding_strの"ABC"に全部変わっている。
form3を"BBB"に変えると、他も"BBB"になり、form1を"CCC"に変えると、他も"CCC"になる。