【发布时间】:2019-02-10 10:27:24
【问题描述】:
我将 Storyboard 与 MvvmCross 和 Xamarin iOS 一起使用。 A 我遇到了异常。这是堆栈跟踪:
{System.Collections.Generic.KeyNotFoundException:找不到 Kosht.Core.ViewModels.TutorialViewModel 的视图 在 MvvmCross.Views.MvxViewsContainer.GetViewType (System.Type viewModelType) [0x00081] in :0 在 MvvmCross.Presenters.MvxAttributeViewPresenter.GetPresentationAttribute (MvvmCross.ViewModels.MvxViewModelRequest 请求) [0x0000c] in :0 在 MvvmCross.Presenters.MvxAttributeViewPresenter.Show (MvvmCross.ViewModels.MvxViewModelRequest 请求) [0x00000] in :0 在 MvvmCross.Platforms.Ios.Views.MvxIosViewDispatcher+c__DisplayClass2_0.b__0 () [0x0001d] in :0 在 MvvmCross.Base.MvxMainThreadAsyncDispatcher+c__DisplayClass0_0.b__0 () [0x00000] in :0 在 MvvmCross.Base.MvxMainThreadAsyncDispatcher+c__DisplayClass1_0+
d.MoveNext () [0x00011] in :0 --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.AsyncMethodBuilderCore+c.b__6_0(System.Object 状态)[0x00000] 在 /Library/Frameworks/Xamarin.iOS.framework/Versions/11.14.0.14/src/Xamarin.iOS/mcs/class/参考源/mscorlib/system/runtime/compilerservices/AsyncMethodBuilder.cs:1018 在 Foundation.NSAsyncSynchronizationContextDispatcher.Apply () [0x00000] 在 /Library/Frameworks/Xamarin.iOS.framework/Versions/11.14.0.14/src/Xamarin.iOS/Foundation/NSAction.cs:178 --- 从先前抛出异常的位置结束堆栈跟踪 --- 在(包装器托管到本机)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.String principalClassName, System.String delegateClassName) [0x0002c] /UIKit/UIApplication.cs:63 在 Kosht.iOS.Application.Main (System.String[] args) [0x00001] 在 /Users/vadimkhadyka/Projects/Kosht/src/Mobile/Kosht.iOS/Main.cs:13 }
我的教程视图:
[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 并从MvxViewController 继承我的TutorialView,一切正常,但对于我的基类,我得到了例外。
【问题讨论】:
-
我对 MVVMcross 不是很熟悉,但是你不需要为框架放弃某些命名约定来连接视图模型和视图吗?我做出这个假设是因为我没有看到你在任何地方使用 BindingContext
-
@Woj 可能,我没有看到任何命名问题。如果你看到了,欢迎你:)
标签: c# xamarin xamarin.ios mvvmcross