Вы должны позволить MvvmCross сделать это за вас.Обычно вы указываете, какая ViewModel должна отображаться первой в вашем IMvxAppStart
производном классе.
public class AppStart : IMvxAppStart
{
private readonly IMvxNavigationService _navigationService;
public AppStart(IMvxNavigationService navigationService)
{
_navigationService = navigationService;
}
public void Start(object hint = null)
{
try
{
_navigationService.Navigate<MainViewModel>().GetAwaiter().GetResult();
}
catch (System.Exception e)
{
}
}
}
Где MainViewModel
будет ViewModel, связанной с вашим ViewController, который является MvxTabBarViewController
.
Затем просто выполните обычную церемонию в AppDelegate, которую MvvmCross ожидает от вас:
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
Window = new UIWindow(UIScreen.MainScreen.Bounds);
var setup = new Setup(this, Window);
setup.Initialize();
var startup = Mvx.Resolve<IMvxAppStart>();
startup.Start();
Window.MakeKeyAndVisible();
return true;
}
Таким образом, Setup
раскручивает контейнер IoC и другие связанные службы MvvmCross.Затем ваш IMvxAppStart
перейдет к первому ViewController.
В зависимости от того, как вы приписываете свой MvxTabBarViewController
, он будет заключен в NavigationViewController.Вы можете управлять им с помощью MvxRootPresentationAttribute
.
[MvxRootPresentation(WrapInNavigationController = true)]
public partial class MainViewController : MvxTabBarViewController<MainViewModel>
EDIT:
Вместо обычной церемонии MvvmCross 6.0 упростил эту часть.Поэтому удалите тело AppDelegate и создайте его следующим образом:
[Register("AppDelegate")]
public partial class AppDelegate : MvxApplicationDelegate<MvxIosSetup<App>, App>
{
}
В вашем Ядре у вас есть класс App
, который реализует MvxApplication
.Здесь вызовите RegisterAppStart<TViewModel>()
в переопределении Initialize()
:
public class App : MvxApplication
{
public override void Initialize()
{
RegisterAppStart<RootViewModel>();
}
Тогда не создавайте свой собственный класс AppStart
.Вы можете выполнить запуск пользовательского интерфейса в Startup()
в классе App
.