我制作了HomeViewModel
,其中包含要在ViewModel
中展示的其他TabParPresenter
个内容。这工作正常,ViewModel
个关联的View
在相应的标签中正确显示。但是,ViewModel
的{{1}}会检查ctor
,当某些条件适用时,它需要导航到SettingsViewModel
,这不是ViewModel
的一部分} {s}包含在HomeViewModel
中。
导航事件被TabBarPresenterHost
捕获,这只是应用程序的Presenter
,如果TabBarPresenter
存在且不为null,则会传递给TabBarPresenter.ShowView()
方法。所有这些都发生在TabBarPresenter
完成加载并且SelectedViewController
设置在ViewDidLoad
之前。因此,TabBarPresenter
依赖于使用SelectedViewController
来推送新的View
我明显得到Null Reference Exception
。
简而言之,我想要的是:
if (conditionForShowingHome == true)
GoToHome();
else
GoToSettings();
然后当我在SettingsViewModel
内部设置了我需要的东西时,你会回到HomeViewModel
。
打破这一点的是ViewModel
在View
完成加载之前加载,导航事件在View
加载完成之前执行。任何想法如何解决这个问题?
答案 0 :(得分:1)
我担心将此代码放在ViewModel构造函数中可能会导致问题。
在导航期间调用ViewModel构造函数 - 并非所有平台都支持在现有导航仍在进行时启动新导航。
要解决此问题,我个人选择在导航之前将此类行为放在代码中。
在正常导航的情况下,这可以进入MvxCommand执行处理程序。
在应用程序启动的情况下,我在自定义应用程序启动时执行此操作 - 请参阅https://speakerdeck.com/cirrious/appstart-in-mvvmcross