Мы пытаемся создать приложение с несколькими вкладками. В качестве эталонного проекта мы используем этот пример: http://slodge.blogspot.co.uk/2013/06/n25-tabs-n1-days-of-mvvmcross.html
Чтобы получить экземпляры ViewModel, необходимые для создания вкладок, мы использовали шаблон «HomeViewModel», как указано в этом сообщении: Создать модель представления с помощью MVVMCross, встроенного в factory?
Что мне не нравится в этом подходе, так это инициализация ViewModel с помощью «нового». Насколько я понимаю, он пропускает весь ViewModel-Lifecycle (https://github.com/slodge/MvvmCross/wiki/View-Model-Lifecycle), который нам очень нравится. В нашем текущем проекте мы хотели бы использовать метод жизненного цикла «start()», но он никогда не вызывается из-за инициализации с «новым».
Что сработало для нас, так это пойти таким путем:
var loaderService = Mvx.Resolve<IMvxViewModelLoader>();
var vm = (UserListViewModel)loaderService.LoadViewModel(new MvxViewModelRequest(typeof(UserListViewModel), null, null, null), null);
Итак, мой вопрос: это способ выполнить работу или это просто грязный обходной путь, и есть гораздо лучшее решение?
Обновление: мы пришли к такому решению:
CreateTabFor<SettingsViewModel>("Settings", "settings");
//This method loads the ViewModel
private UIViewController CreateTabFor<TTargetViewModel>(string title, string imageName)
where TTargetViewModel : class, IMvxViewModel
{
var controller = new UINavigationController();
controller.NavigationBar.TintColor = UIColor.Black;
var viewModelRequest = new MvxViewModelRequest(typeof(TTargetViewModel), null, null, null);
var screen = this.CreateViewControllerFor<TTargetViewModel>(viewModelRequest) as UIViewController;
SetTitleAndTabBarItem(screen, title, imageName);
controller.PushViewController(screen, false);
return controller;
}