デフォルトのビューモデルの関連付けをオーバーライドしようとしていますが、今のところうまくいきません。一部の ViewModel は、デフォルトのビュー モデル ルックアップで想定される命名規則に従っていないため、このデフォルトの動作をオーバーライドする必要があります。たとえば、名前空間 Pidac.Core.ViewModels にいくつかの ViewModel があり、ビューは MyApplication.Droid.Views で定義されています。
次のように、Droid プロジェクトの Setup.cs で明示的な型マッピングを提供するオプションを試しました。
protected override void InitializeViewLookup()
{
var viewModelViewLookup = new Dictionary<Type, Type>()
{
{ typeof (FirstViewModel), typeof(FirstView) },
{ typeof (FloatSettingViewModel), typeof(FloatSettingView) },
{ typeof (SettingsViewModel), typeof(SettingsView) },
{ typeof (SearchResultDialogViewModel), typeof(SearchResultDialogView) },
};
var container = Mvx.Resolve<IMvxViewsContainer>();
container.AddAll(viewModelViewLookup);
}
これで、アプリケーションが MvvmCross ロゴ画面を通過しなくなりました。
別の方法として、次のように FloatSettingView.cs 内で具体的なビュー モデル タイプを提供しようとしました。
[Activity(Label = "settings", Theme = "@android:style/Theme.NoTitleBar")]
public class FloatSettingView : MvxActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.FloatSettingView);
}
public new FloatSettingViewModel ViewModel
{
get { return base.ViewModel as FloatSettingViewModel; }
set { base.ViewModel = value; }
}
}
この 2 番目のアプローチのみを使用し、Setup.cs でビュー タイプ マッピングへのビュー モデルを提供しないと、フレームワークが FloatSettingView を読み込もうとすると例外が発生します。例外は Failed to find viewmodel for Pidac.Core.ViewModels.FloatSettingViewModel.
次のように、MvxViewForAttribute でビューを装飾する 3 番目のオプションを試しました。
[Activity(Label = "settings", Theme = "@android:style/Theme.NoTitleBar")]
[MvxViewFor(typeof(FloatSettingViewModel))]
public class FloatSettingView : MvxActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.FloatSettingView);
}
}
運がない。私は明らかにここで何かを見落としています。ソースを掘り下げる前に、誰かこれをやったことがありますか?
ティア。