Open LeoAndo opened 2 years ago
dataBindingのターゲットはViewのビジュアル要素であり、dataBindingのソースはviewModelのプロパティ 理想的には、viewModelを特定のplatformに依存させるべきではない platformに依存しないviewModelは他のxamlベース環境でも共有、移植しやすいから。
なので、viewModelでは、以下の文を使用すべきではない。
using Xamarin.Forms;
viewModelで定義しているpropertyのset, get処理は参照するprivate field
とOnPropertyChanged
に渡す文字列が違うだけで同じような処理。このような処理はコピーで作るとタイプミスが発生するため、似たようなコードは共通処理化したい。
ViewModel のコードは、呼び出し元のプロパティ名を自動的に取得する CallerMemberName 属性を使用して OnPropertyChanged メソッドを定義することで合理化できる PR
Xamarin.Formsには、dataBindingを通じてButtonなどからViewModelのメソッドを直接呼び出せる機能がある。 その機能が、Command Interfaceと呼ばれるプロトコルになります。
Command Interfaceは以下の8つのクラスでサポートされている。
Command Interfaceを実装するには、viewModelでICommand型のプロパティを1つ以上定義する。 つまりそのプロパティの型はこれらのメソッドとイベントを実装している型になる。 そして、viewModelにおいてICommandを実装しているプロパティをButtonのCommandプロパティにBindできる。 Buttonがクリックされると、Clickedイベントを発行するが、ButonのCommandプロパティにbindされたオブジェクトExecuteメソッドも呼び出される。 Executeメソッドには、引数としてButtonのCommandParameterプロパティに設定されているオブジェクトが渡される。 viewModelの状態によってはExecuteメソッドを呼び出せないことがあるので、その判定用にCanExecuteメソッドが用意されている。
MVVMの相互関係
https://docs.microsoft.com/ja-jp/xamarin/xamarin-forms/creating-mobile-apps-xamarin-forms/summaries/chapter18#mvvm-interrelationships
ref
https://docs.microsoft.com/ja-jp/xamarin/xamarin-forms/creating-mobile-apps-xamarin-forms/summaries/chapter18