uiviewcontroller - 使用 MvvmCross 动态加载 UIViewController
问题描述
我正在尝试从 XIB 或情节提要(使用 MvvmCross 5.0.6)加载 ViewModel 绑定的 ViewController。我的应用程序的逻辑是,这个视图控制器不属于标准的根/子导航模式,我需要能够动态地实例化它。
如果没有 MvvmCross,我可以在 Xamarin.iOS 中轻松地为此使用 segue,但 MvvmCross 似乎不适用于 segue(除非我误解了某些东西)。
如何实例化视图控制器以使其绑定到其视图模型,并且可以将其传递给 UIViewController.AddChildViewController() 之类的方法?
我尝试了以下方法,但它导致 NullReferenceException(在 MvxViewModelLoader.LoadViewModel(MvxViewModelRequest request, 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
可以成功用作根/子导航模式,请尝试将其显示为内容(也许您可以将其放入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);
推荐阅读
- vb.net - 在电脑和手机之间传输文件
- javascript - 映射对象,使用状态,并通过 setState 中的函数传递值
- flask - flask-sqlalchemy db.create_all() 不创建助手/辅助表
- c++ - 字符串在文本文件中拆分多行
- python - 熊猫数据框。更改浮点格式。保持类型“浮动”
- android - 在 Flutter 中更改文本字段 Thumb?
- python - 避免“DoesNotExist at /”
- symfony - 如何在 Symfony 4 中定义整个数据库模式?
- regex - python中的特定正则表达式
- javascript - 数组怎么可能是未定义的?