Bindingでデータの疎結合を行う

Binding

前回、ViewとModelとViewModelのファイルの疎結合を行いました。
続いて足し算に用いるデータである1つめの値、2つめの値、1と2を足した結果の3つのint型のデータをBindingでViewと疎結合を行います。
Bindingについて知らない人はWindowsストアアプリプログラミングTipsのBindingの章を見てください。

まず、データBindingを行うには、Bindingしたいコントロール(3つのTextBox)のDataContextプロパティにBindingしたいデータ(Value1,Value2,Resut)を入れる必要があります。

今回の場合、TextBoxのDataContextは親コントロールであるPageクラスのDataContextと同じものになるので
PageクラスのDataContextにMainViewModelを入れます。

MainPage.xamlのPageタグに名前空間を追加して、

DataContextプロパティにMainViewModelを入れます。

次に3つのTextBoxにBindingの構文を書きます。
今回DataContextはMainViewModelなのでBindingのPathはSumModel.Value1となります。

ModeはTextBoxの入力もModelに反映したいのでTwoWayとなります。

6

ViewModelから変更通知を送る

続いて、ViewModelやModelからViewに変更通知を送るためにINotifyPropertyChangedインターフェースを実装して変更通知をViewに送信します。

MVVMLightToolkitの場合、ViewModelBaseがINotifyPropertyChangedを実装していて、
「RaisePropertyChanged」メソッドを実行するだけで変更通知を送ることができます。
フィールドの値が書き換えられた時に通知を行うので
プロパテイのセッターにRaisePropertyChangedを書きます。
MainViewModel.csのSumModelのところをこのようにします。
RaisePropertyChangedメソッドの引数にはプロパティ名をstring型でいれます。

Modelから変更通知を送る

ModelもRaisePropertyChangedメソッドによって変更通知を行います。
RaisePropertyChangedはObservableObjectクラスのメソッドなので継承しているので使うことができます。

これでModelからの変更通知を送ることができました。
ModelであるSumクラスはこのようになります。
今回は、値の確認のためにコンストラクタでValue1とValue2に適当な値を入れます。

ViewとModelの値の同期がとれていれば成功です。

8