2

デフォルトのビューモデルの関連付けをオーバーライドしようとしていますが、今のところうまくいきません。一部の 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);
            } 

        }

運がない。私は明らかにここで何かを見落としています。ソースを掘り下げる前に、誰かこれをやったことがありますか?

ティア。

4

1 に答える 1