2013-06-27 31 views
2

我已经实现了TabBarController,就像iOS的Conference教程一样。现在一切正常,除非看起来ViewModels上的Init方法不会像通常那样被调用。mvvmcross TabBarController ViewModel Init()未被调用?

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

编辑

我想我真的问这里是如果我手动实例化一个视图模型,并通过扩展/辅助方法“创造”,从它一看,会初始化被调用在一些点过程?如果是这样,我可以期望init在viewmodel上调用什么?

回答

4

如果使用默认的ViewModel定位器创建构造 - 初始化 - 重新加载状态 - 开始(C-I-R-S)序列,则调用MvxViewModel - 当调用ShowViewModel时会发生这种情况。

如果通过在ViewModel上直接调用new来创建子标签的ViewModels,就像在the Conference HomeViewModel.cs#L11中那样 - 那么显然这个相同的序列不会发生。

真的在这里所不同的是间:

  • 的标签ViewModel S的只是INotifyPropertyChanged对象
  • 页面级MvxViewModel S的也INotifyPropertyChanged对象,但你还期望得到内初始化导航。

如果你想统一这两个概念,那么你可能......但实际上我怀疑它可能更简单也更干净,也许给两个类的类型不同的名称,只是把init代码放入构造函数对于选项卡视图模型,或者也可以在Home构造函数中自己调用Init

+0

太好了,这是我怀疑的情况。我将不得不做一些重构来完成这项工作,但它确实有可能。感谢您的意见。 – theMothaShip

+0

只是一个fyi,我通过在ViewDidShow过载中的viewmodels上调用init来实现它。出于某种原因,如果它是由mvvmcross初始化的,我无法在视图模型的构造函数中调用Init。不知道为什么,但无论如何,如果我调用由mvvmcross调用的操作/方法之外的init它似乎工作正常。 – theMothaShip

相关问题