Динамическая загрузка UIViewController с помощью MvvmCross - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь загрузить ViewController, связанный с ViewModel, из XIB или раскадровки (используя MvvmCross 5.0.6). Логика моего приложения такова, что этот контроллер представления не попадает в стандартный шаблон навигации root / child, и мне нужно иметь возможность создавать его динамически.

Без MvvmCross я мог бы легко использовать segues для этого в Xamarin.iOS, но MvvmCross, похоже, не работает с segues (если я что-то не так понимаю).

Как создать экземпляр контроллера представления, чтобы он был связан с его моделью представления, и я мог передать его методу, подобному UIViewController.AddChildViewController ()?

Я попробовал следующее, но это приводит к исключению NullReferenceException (в MvxViewModelLoader.LoadViewModel (запрос MvxViewModelRequest, IMvxBundle saveState)):

var vmRequest = new MvxViewModelRequest(typeof(MyVcViewModel));
var myVc = (segue.DestinationViewController as MvxViewController).CreateViewControllerFor<MyVcViewModel>(vmRequest) as MyVc;

this.AddChildViewController(myVc);

1 Ответ

0 голосов
/ 09 мая 2018

Вы связали 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);
...