LeoAndo / xamarin-forms-training

traning for Xamarin.Forms
0 stars 1 forks source link

MVVM #68

Open LeoAndo opened 2 years ago

LeoAndo commented 2 years ago

MVVMの相互関係

https://docs.microsoft.com/ja-jp/xamarin/xamarin-forms/creating-mobile-apps-xamarin-forms/summaries/chapter18#mvvm-interrelationships

スクリーンショット 2021-08-18 14 20 02

ref

https://docs.microsoft.com/ja-jp/xamarin/xamarin-forms/creating-mobile-apps-xamarin-forms/summaries/chapter18

LeoAndo commented 2 years ago

ViewModelとdataBinding

dataBindingのターゲットはViewのビジュアル要素であり、dataBindingのソースはviewModelのプロパティ 理想的には、viewModelを特定のplatformに依存させるべきではない platformに依存しないviewModelは他のxamlベース環境でも共有、移植しやすいから。

なので、viewModelでは、以下の文を使用すべきではない。

using Xamarin.Forms;

ViewModelとdataBindingを使う利点

LeoAndo commented 2 years ago

viewModelの対話型のproperty

LeoAndo commented 2 years ago

viewModelの合理化

https://github.com/LeoAndo/xamarin-forms-traning/pull/70/files#diff-2a75800a8e6499432129927462e9b29431e051432179beba1d49456a363c4aa2R17-R29

viewModelで定義しているpropertyのset, get処理は参照するprivate fieldOnPropertyChangedに渡す文字列が違うだけで同じような処理。このような処理はコピーで作るとタイプミスが発生するため、似たようなコードは共通処理化したい。

ViewModel のコードは、呼び出し元のプロパティ名を自動的に取得する CallerMemberName 属性を使用して OnPropertyChanged メソッドを定義することで合理化できる PR

ref

https://docs.microsoft.com/ja-jp/xamarin/xamarin-forms/creating-mobile-apps-xamarin-forms/summaries/chapter18#streamlining-the-viewmodel

LeoAndo commented 2 years ago

Command Interface

Xamarin.Formsには、dataBindingを通じてButtonなどからViewModelのメソッドを直接呼び出せる機能がある。 その機能が、Command Interfaceと呼ばれるプロトコルになります。

Command Interfaceは以下の8つのクラスでサポートされている。

Command Interfaceの基本的な仕組み

スクリーンショット 2021-08-18 19 39 30

Command Interfaceを実装するには、viewModelでICommand型のプロパティを1つ以上定義する。 つまりそのプロパティの型はこれらのメソッドとイベントを実装している型になる。 そして、viewModelにおいてICommandを実装しているプロパティをButtonのCommandプロパティにBindできる。 Buttonがクリックされると、Clickedイベントを発行するが、ButonのCommandプロパティにbindされたオブジェクトExecuteメソッドも呼び出される。 Executeメソッドには、引数としてButtonのCommandParameterプロパティに設定されているオブジェクトが渡される。 viewModelの状態によってはExecuteメソッドを呼び出せないことがあるので、その判定用にCanExecuteメソッドが用意されている。

PR

refs

https://docs.microsoft.com/ja-jp/xamarin/xamarin-forms/creating-mobile-apps-xamarin-forms/summaries/chapter18#the-command-interface