2

我已经实现了一个 TabBarController,很像 iOS 的会议教程。现在一切都运行良好,只是 Viewmodels 上的选项卡的 Init 方法似乎永远不会像往常一样被调用。

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

编辑

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

4

1 回答 1

4

如果使用默认的 ViewModel 定位器创建了Construction-Initialize-ReloadState-Start (CIRS) 序列,则会调用MvxViewModel它——这就是调用ShowViewModel.

如果子选项卡的 ViewModel 是通过new直接调用 ViewModel 来创建的——就像在会议 HomeViewModel.cs#L11中一样——那么显然不会发生同样的顺序。

真正的区别在于:

  • tabViewModel只是INotifyPropertyChanged对象
  • page-level MvxViewModels 也是INotifyPropertyChanged对象,但您进一步希望在导航中对其进行初始化。

如果你想统一这两个概念,那么你可能可以......但实际上我怀疑给这两个类类型不同的名称可能会更简单和更清晰,只需将初始化代码放在选项卡视图模型的构造函数中,或者也许只是InitHome构造函数中自己调用它们。

于 2013-06-27T23:34:31.257 回答