MvvmCross Xamarin IOS“找不到ViewModel的视图”

时间:2018-09-05 10:00:07

标签: c# xamarin xamarin.ios mvvmcross

我将Storyboard与MvvmCross和Xamarin iOS一起使用。 我要例外了。这是堆栈跟踪:

  

{System.Collections.Generic.KeyNotFoundException:找不到Kosht​​.Core.ViewModels.TutorialViewModel的视图     在MvvmCross.Views.MvxViewsContainer.GetViewType(System.Type viewModelType)[0x00081]中,位于:0     在MvvmCross.Presenters.MvxAttributeViewPresenter.GetPresentationAttribute(MvvmCross.ViewModels.MvxViewModelRequest请求)中的[0x0000c]在:0中     在MvvmCross.Presenters.MvxAttributeViewPresenter.Show处(MvvmCross.ViewModels.MvxViewModelRequest请求)[0x00000]在:0中     在MvvmCross.Platforms.Ios.Views.MvxIosViewDispatcher + <> c__DisplayClass2_0.b__0()[0x0001d]在:0中     在MvvmCross.Base.MvxMainThreadAsyncDispatcher + <> c__DisplayClass0_0.b__0()[0x00000]在:0中     在MvvmCross.Base.MvxMainThreadAsyncDispatcher + <> c__DisplayClass1_0 + d.MoveNext()[0x00011]在:0中   ---从之前引发异常的位置开始的堆栈结束跟踪---     在/Library/Frameworks/Xamarin.iOS.framework/Versions/11.14.0.14/src/Xamarin.iOS/mcs/class/中的System.Runtime.CompilerServices.AsyncMethodBuilderCore + <> c.b__6_0(系统对象状态)[0x00000] referencesource / mscorlib / system / runtime / compilerservices / AsyncMethodBuilder.cs:1018     在/Library/Frameworks/Xamarin.iOS.framework/Versions/11.14.0.14/src/Xamarin.iOS/Foundation/NSAction.cs:178中的Foundation.NSAsyncSynchronizationContextDispatcher.Apply()[0x00000]中   ---从之前引发异常的位置开始的堆栈结束跟踪---     在(包装器托管到本地)UIKit.UIApplication.UIApplicationMain(int,string [],intptr,intptr)     在/Library/Frameworks/Xamarin.iOS.framework/Versions/11.14.0.14/src/Xamarin.iOS中的UIKit.UIApplication.Main(System.String [] args,System.IntPtr主体,System.IntPtr委托)[0x00005] /UIKit/UIApplication.cs:79     在/Library/Frameworks/Xamarin.iOS.framework/Versions/11.14.0.14/src/Xamarin.iOS中的UIKit.UIApplication.Main(System.String [] args,System.StringPrincipalClassName,System.String委托ClassName)[0x0002c] /UIKit/UIApplication.cs:63     在/Users/vadimkhadyka/Projects/Kosht​​/src/Mobile/Kosht​​.iOS/Main.cs:13}中的Kosht​​.iOS.Application.Main(System.String [] args)[0x00001]

我的TutorialView:

[MvxViewFor(typeof(TutorialViewModel))]
    [MvxFromStoryboard("Tutorial")]
    [MvxRootPresentation]
    public partial class TutorialView : BaseViewController<TutorialViewModel>
    {
        public TutorialView() : base("TutorialView", null)
        {
        }

        public override void ViewDidLoad()
        {
            base.NavigationController.NavigationBarHidden = true;
            base.ViewDidLoad();
        }
    }

我的BaseViewController:

    public class BaseViewController<TViewModel> : MvxViewController,  IBaseView<TViewModel> where TViewModel : BaseViewModel
        {
            protected BaseViewController(string nibName, NSBundle bundle) : base(nibName, bundle)
            {
            }

            public BaseViewController(IntPtr handle) : base(handle)
            {
            }

            public BaseViewController()
            {
            }

            public override void ViewDidLoad()
            {
                base.ViewDidLoad();
                // Perform any additional setup after loading the view, typically from a nib.
            }

            public new TViewModel ViewModel => (TViewModel)base.ViewModel;


            public override void DidReceiveMemoryWarning()
            {
                base.DidReceiveMemoryWarning();
                // Release any cached data, images, etc that aren't in use.
            }
}

如果我删除BaseViewController并从TutorialView继承了MvxViewController,一切都会很好,但是对于我的基类,我会遇到异常。

1 个答案:

答案 0 :(得分:0)

更改此行

public class BaseViewController<TViewModel> : MvxViewController,  IBaseView<TViewModel> where TViewModel : BaseViewModel

收件人

public class BaseViewController<TViewModel> : MvxViewController<TViewModel> where TViewModel : class, IMvxViewModel

并删除此

public new TViewModel ViewModel => (TViewModel)base.ViewModel;