MVVMCROSS版本3.x和4.x在ViewModel Lifececle方面有几个差异,主要围绕如何构建,初始化和管理ViewModels。
mvvmcross 3.x
在MVVMCross 3.X中,ViewModel Lifecycle遵循称为CIRS:Construction,Init(),ReloAdstate()和start()的序列。该序列用于初始化和管理ViewModels。这是一个故障:
- 构造:ViewModel是使用IOC容器实例化的,可以进行依赖注入。这是将服务和其他依赖性注入ViewModel的地方。
-INIT():此方法用于初始化导航参数。它是在构造后调用的,通常是您通常设置传递给ViewModel的任何初始数据或参数。
- reloAdstate():此方法负责在墓碑后重新化视图模型的状态,这是当应用程序悬挂下来然后由于记忆较低而恢复时发生的。
- start():当初始化和补液完成时,此方法被调用。它通常用于启动任何正在进行的操作或任务。
mvvmcross 4.x
MVVMCross 4.X继续使用CIRS序列,但引入了一些变化和改进:
- 构造保持不变,使用IOC进行依赖注入。
-INIT()仍将导航参数初始化,但现在更加灵活,允许输入导航参数。
-ReloAdstate()在墓碑后继续处理状态补液。
- start()是相似的,但由于引入了更多异步初始化方法,因此使用频率较低。
MVVMCROSS 4.x的重大变化是对键入导航参数的持续支持,这允许在ViewModels之间传递更多结构化数据。此外,MVVMCross 4.x为导航和生命周期管理的未来改善奠定了基础,这在MVVMCross 5.x中得到了进一步增强。
###密钥差异
- 导航参数:MVVMCROSS 3.X将导航参数直接传递到`init()`方法,而MVVMCross 4.X支持打字导航参数,从而使ViewModels之间的复杂数据更加容易。
- 生命周期的灵活性:MVVMCross 4.X在处理ViewModel Lifecycles时提供了更大的灵活性,尤其是在引入异步初始化方法时。
- 墓碑支持:两个版本都支持墓碑,但是MVVMCross 4.X继续完善此过程,以确保ViewModels可以有效地节省和恢复其状态。
总体而言,MVVMCROSS 4.X建立在3.x基础上,通过增强导航,生命周期管理以及处理复杂数据和异步操作的灵活性。
引用:[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[2] https://stackoverflow.com/questions/49322704/mvvmcross-view-model-lifecycle-restore-not-working
[3] https://stackoverflow.com/questions/15961664/viewmodel-lifecycle-when-does-it-get-disposed
[4] https://stackoverflow.com/questions/71959649/does-mvvmcross-have-a-built-in-message-for-viewmodel-viewmodel-viewmodel-to-tell-view-view-when-viewappea
[5] https://stackoverflow.com/questions/29372480/mvvmcross-viewmodel-life-cycle
[6] https://www.mvvmcross.com/documentation/advanced/customizing-usion-app-anp-setup
[7] https://www.mvvmcross.com/documentation/tutorials/tipcalc/a-note-about-out-views-views-and-viewmodels
[8] https://www.ramotion.com/blog/what-is-mvvm/
[9] https://www.mvvmcross.com/documentation/fundamentals/navigation
[10] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[11] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[12] https://github.com/mvvmcross/mvvmcross/issues/2738