我对MvvmCross 5中引入的导航服务有疑问。
在版本4中:
ShowViewModel<ViewModel>()
导航到片段Init
方法OnCreateView
方法在第5版中:
await NavigationService.Navigate<ViewModel>()
OnCreateView
Initialize
方法。这是错误还是异步导航功能? 如果需要,是否有更好的方法来基于ViewModel数据操作Fragment视图?
答案 0 :(得分:3)
这是一个错误还是异步导航的功能?
这是设计的,但自那时起(v5.0.4)进行了修订,请参见下面的流量变化。
如果需要,是否有更好的方法来操纵片段 基于ViewModel数据的视图?
使用v5.0.4 +应该会产生您期望的行为。在开始视图生命周期事件之前,等待Initialize()
ViewModel
ViewModel.Ctor
处的导航服务完成。
MvvmCross v5.0.0 - v5.0.3
您看到的行为出现在MvvmCross 5.0.0-5.0.3中。流程如下:
Init(parameter)
ViewModel.ReloadState(savedState)
(已弃用,使用反射,而非使用类型安全初始化) ViewModel.Start()
BeforeNavigate
*ViewDispatcher.ShowViewModel()
(NavigationService事件) *ViewModel.Initialize()
(触发视图生命周期) AfterNavigate
强> BeforeClose
(NavigationService事件) ViewDispatcher.ChangePresentation()
(NavigationService事件) AfterClose
ViewModel.Ctor
(NavigationService事件) MvvmCross v5.0.4 +
v5.0.4 +改进了流程并更改了导航顺序:
BeforeNavigate
*ViewModel.Initialize()
(NavigationService事件) Init(parameter)
强> ViewModel.ReloadState(savedState)
(已弃用,使用反射,而非使用类型安全初始化) ViewModel.Start()
*ViewDispatcher.ShowViewModel()
AfterNavigate
(触发视图生命周期) BeforeClose
(NavigationService事件) ViewDispatcher.ChangePresentation()
(NavigationService事件) AfterClose
Initialize
(NavigationService事件) 其他信息
您可以查看导航订单中记录的GitHub问题(#1968)。此外,您还可以查看更新版本5.0.4的{{1}}订单的提取请求(#1971)。