クロスプラットフォーム MVVM フレームワーク「MvvmCross」がメジャーアップデートして MvvmCross 5.0 がリリースされています。MvvmCross 5.0 は、Xamarin.iOS, Xamarin.Android, Xamarin.Mac, Xamarin.Forms, Universal Windows Platform (UWP), Windows Presentation Framework (WPF) をターゲットとしています(Windows Phone 8.x, Windows 8.x が削除されました)。
少人数で開発されていることもあり 4.x 系のアップデートはもうないと思われます。これから開発する場合 5.x 系を選ばない理由はないでしょう。当ブログも含めて 4.x 系以下の情報は古く 5.0 ではまったく異なる場合があるので最新の情報を確認しましょう。
所感としては、4.x 系と大きく異なっていますが(ようやく便利になった感じ)、そのままアップデートしてもある程度動くと思います。実際 iOS/Android のプロジェクトを先日から 5.0 beta にアップデートする作業をしていました。Navigation(画面遷移と画面間の値の受け渡し)などの作法は全く異なりますが、4.x 系の作法でも動くので少しずつ変更しています。
MvvmCross 5.0
詳しくは、MvvmCross 5.0 release! を参照してください。
以下、気になったところだけピックアップ。
Navigation
もう ShowViewModel は使いません(フレームワーク内部では使っています)。新しい NavigationService を使って、画面遷移します(ViewModel 間でやり取りします)。特に次の2点は大きいですね。
- ViewModel へ渡すパラメーターが typesafe になりました。
- ViewModel から戻り値も受け取れるようになりました。
詳しくは、Navigation を参照。
Lifecycle
ViewModel で、View のライフサイクル イベント起点で簡単に処理が記述できるようになっています。ViewModel に次のメソッドが追加されています。
void Appearing(); void Appeared(); void Disappearing(); void Disappeared();
iOS presenter
iOS 用の presenter が改善されています。これまで Modal 表示など View をどのように表示するかを presenter クラスにごりごり記述していましたが、デフォルトである程度使える presenter が実装されています。
例えば、View クラスに MvxModalPresentation 属性を付けるだけで Modal 表示になります。
活用するには、ドキュメントおよびサンプル、そして実装された Presenter のコードも参照する必要があると思います。
ちなみに Android の presenter 改善は MvvmCross 6.0 予定です。
MvvmCross 6.0
既に MvvmCross 6.0 のロードマップも公開されています。
- Even better Xamarin.Forms support
- A new default presenter for Android
- Better handling of Fragments
さらに、.NET Standard 2.0 サポートも含まれています。プラグインの構造の見直しや、より async/await や C# 7 の使用も。
ロードマップの議論は MvvmCross roadmap · Issue #1415 · MvvmCross/MvvmCross でされています。