我已经实现了一个TabBarController,就像iOS的会议教程一样。现在一切都运行良好,除了看起来ViewTodels上的Init方法永远不会像通常那样被调用。
有没有我忘记做的事情来确保调用Init?如果必须,我可以将此代码移动到ViewModel的构造函数中,但如果可能的话我想避免这种情况。
修改
我想这里我真正要问的是,如果我手动实例化一个viewmodel并通过扩展/辅助方法“创建”一个视图,那么init会在进程的某个时刻被调用吗?如果是这样,我可以在什么时候期望在viewmodel上调用init?
答案 0 :(得分:4)
如果使用默认的ViewModel定位器创建了MvxViewModel
,则会调用Construction-Initialize-ReloadState-Start(CIRS)序列 - 这是在您调用ShowViewModel
时发生的情况。
如果子标签的ViewModel是通过直接在ViewModel上调用new
来创建的 - 就像在the Conference HomeViewModel.cs#L11中那样 - 那么显然这个序列不会发生。
真正区别在于:
ViewModel
只是INotifyPropertyChanged
个对象MvxViewModel
,它们也是INotifyPropertyChanged
个对象,但您希望在导航中进一步初始化。如果你想统一这两个概念那么你可能会...但实际上我怀疑它可能更简单和更清晰,或许给两个类类型不同的名称,只需将init代码放在选项卡的构造函数中查看模型,或者只是在Init
构造函数中自己调用Home
。