我已经实现了一个 TabBarController ,非常类似于 iOS 的 session 教程。现在一切都运行良好,除了选项卡的 Viewmodel 上的 Init 方法似乎永远不会像平常那样被调用。
是否有什么我忘记做的事情来确保 Init 被调用?如果必须的话,我可以将此代码移动到 ViewModel 的构造函数中,但如果可能的话我想避免这种情况。
编辑
我想我在这里真正要问的是,如果我手动实例化一个 View 模型并通过扩展/帮助器方法从中“创建”一个 View ,init 会在这个过程中的某个时刻被调用吗?如果是这样,我什么时候可以在 View 模型上调用 init ?
最佳答案
在 MvxViewModel
上调用 Construction-Initialize-ReloadState-Start (C-I-R-S) 序列如果它是使用默认的 ViewModel 定位器创建的 - 这就是您调用 ShowViewModel
时发生的情况.
如果子选项卡的 ViewModel 是通过调用 new
创建的直接在 ViewModel 上 - 就像 the Conference HomeViewModel.cs#L11 中那样- 那么显然同样的序列不会发生。
真正的区别在于:
- 选项卡
ViewModel
就是INotifyPropertyChanged
对象 - 页面级别
MvxViewModel
s 也是INotifyPropertyChanged
对象,但您进一步希望在导航中对其进行初始化。
如果你想统一这两个概念,那么你可能可以......但实际上我怀疑给这两个类类型提供不同的名称可能会更简单、更清晰,只需将初始化代码放在选项卡的构造函数中查看模型,或者调用 Init
自己在 Home
中查看它们构造函数。
关于xamarin.ios - mvvmcross TabBarController ViewModel Init() 未调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17352252/