mvvmcross TabBarController ViewModel Init()没有被调用?

时间:2013-06-27 20:06:37

标签: xamarin.ios mvvmcross

我已经实现了一个TabBarController,就像iOS的会议教程一样。现在一切都运行良好,除了看起来ViewTodels上的Init方法永远不会像通常那样被调用。

有没有我忘记做的事情来确保调用Init?如果必须,我可以将此代码移动到ViewModel的构造函数中,但如果可能的话我想避免这种情况。

修改

我想这里我真正要问的是,如果我手动实例化一个viewmodel并通过扩展/辅助方法“创建”一个视图,那么init会在进程的某个时刻被调用吗?如果是这样,我可以在什么时候期望在viewmodel上调用init?

1 个答案:

答案 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