使用 MvvmCross 动态加载 UIViewController
Loading a UIViewController Dynamically with MvvmCross
我正在尝试从 XIB 或故事板(使用 MvvmCross 5.0.6)加载绑定 ViewModel ViewController。我的应用程序的逻辑是这样的,这个视图控制器不属于标准 root/child 导航模式,我需要能够动态实例化它。
如果没有 MvvmCross,我可以在 Xamarin.iOS 中轻松地为此使用 segues,但 MvvmCross 似乎无法使用 segues(除非我误解了什么)。
我如何实例化视图控制器,以便它绑定到它的视图模型,我可以将它传递给像 UIViewController.AddChildViewController() 这样的方法?
我尝试了以下方法,但它导致了 NullReferenceException(在 MvxViewModelLoader.LoadViewModel(MvxViewModelRequest 请求,IMvxBundle savedState)):
var vmRequest = new MvxViewModelRequest(typeof(MyVcViewModel));
var myVc = (segue.DestinationViewController as MvxViewController).CreateViewControllerFor<MyVcViewModel>(vmRequest) as MyVc;
this.AddChildViewController(myVc);
您是否已将 MyVcViewModel
绑定到您的 MyVc
?如果 MyVc
可以成功用作 root/child 导航模式,请尝试将其显示为内容(也许您可以将其放在 ViewDidLoad()
事件中):
var vmRequest = MvxViewModelRequest.GetDefaultRequest(typeof(MyVcViewModel));
var viewController = new MvxViewController();
var myView = viewController.CreateViewControllerFor<MyVcViewModel>(vmRequest) as MyVc;
myView.View.Frame = new CGRect(0, 0, 200, 200);
AddChildViewController(myView);
View.AddSubview(myView.View);
我正在尝试从 XIB 或故事板(使用 MvvmCross 5.0.6)加载绑定 ViewModel ViewController。我的应用程序的逻辑是这样的,这个视图控制器不属于标准 root/child 导航模式,我需要能够动态实例化它。
如果没有 MvvmCross,我可以在 Xamarin.iOS 中轻松地为此使用 segues,但 MvvmCross 似乎无法使用 segues(除非我误解了什么)。
我如何实例化视图控制器,以便它绑定到它的视图模型,我可以将它传递给像 UIViewController.AddChildViewController() 这样的方法?
我尝试了以下方法,但它导致了 NullReferenceException(在 MvxViewModelLoader.LoadViewModel(MvxViewModelRequest 请求,IMvxBundle savedState)):
var vmRequest = new MvxViewModelRequest(typeof(MyVcViewModel));
var myVc = (segue.DestinationViewController as MvxViewController).CreateViewControllerFor<MyVcViewModel>(vmRequest) as MyVc;
this.AddChildViewController(myVc);
您是否已将 MyVcViewModel
绑定到您的 MyVc
?如果 MyVc
可以成功用作 root/child 导航模式,请尝试将其显示为内容(也许您可以将其放在 ViewDidLoad()
事件中):
var vmRequest = MvxViewModelRequest.GetDefaultRequest(typeof(MyVcViewModel));
var viewController = new MvxViewController();
var myView = viewController.CreateViewControllerFor<MyVcViewModel>(vmRequest) as MyVc;
myView.View.Frame = new CGRect(0, 0, 200, 200);
AddChildViewController(myView);
View.AddSubview(myView.View);