trapemiyaの日記

hatenablogが新しくなったんで新規一転また2019年1月からちょこちょこ書いてます。C#中心のプログラミングに関するお話です。

Xamarin + MvvmCrossで要らないファイルを削除しよう!

以下の記事に今頃気づきました。また、大変参考になる記事を上げていただき、ありがとうございます。

Xamarin + MvvmCrossでViewとViewModelの対応付けを変更する必要なんてある?
http://iseebi.hatenablog.com/entry/2015/03/01/172123

Xamarin、MvvmCrossと続けてインストールすると、Xamarinのみをインストールした際に作成されたActivityやコードのうち、要らなくなってしまうものが出てくることは何となく気が付いていました。
そこで、今はそれらを削除しています。
Visual Studioで開発していますので、正確にはプロジェクトから除外しており、物理的に削除していません。

削除したファイルは、上記のブログで伊勢さんが紹介されたままで、以下の通りです。

  • Resources/layout/Main.axml
  • MainActivity.cs

#MvvmCrossのインストール時に作成される、

  • Resources/layout/FirstView.axml
  • Views/FirstView.cs

も、私は要らないので削除しています。当然ですが、PCLのApp.csにあるRegisterAppStartメソッドの引数も、これに合わせて修正しなければなりません。

さて、今、ToDo-MvvmCross/_ Droid UI.txtを読むと、以下のように書かれています。

2. Remove any old `MainLauncher` activities - eg Activity1

これが、上記2つのファイルを消せという指示だったのですね。すみません、気が付いていませんでした。WPF + MVVMでの開発ばかりやっていると、ActivityのMainLauncherという考え方に慣れておらず、うっかりスルーしてしまったようです。というか、上の文章の意味が全く理解できていませんでした。

そういうわけで、以下のコードレシピに書いたように、

Xamarin + MvvmCrossでViewとViewModelの対応付けを変更する
https://code.msdn.microsoft.com/Xamarin-MvvmCrossViewViewMo-b3c9b197

MainLauncher = false にする必要はなくて、単に上記の2つのファイルを削除すれば解決だったわけですね。あとでコードレシピに修正を入れておきます。

ところで、

「Xamarin + MvvmCrossでViewとViewModelの対応付けを変更する必要なんてある?」

についてですが、通常はあまり無いと思いますが、1つのViewModelに複数のViewを対応させる、もしくはその逆のことを想定してのことです。したがって、画面遷移等のことは考えていなかったのですが、伊勢さんが指摘されていることはしっかりと書き留めておこうと思います。ありがとうございます。
また、コードレシピに上げた方法の他にも、実は対応付けの変更ができるようで、そのコードも見つけていましたが、それはViewとViewModelを一つずつリストのような形で対応付けて渡すというものでした。時間があればこちらも検証してみようと思ったのですが、こちらはViewとViewModelはあくまで1対1のようでしたので、今のところあまり真剣に考えていません。
いずれにしても、XamarinやPCL等で共通化を目指しているわけですから、共通で使えるViewModelも想定しておいた方が良いのではないだろうか?という発想でした。