【问题标题】:mvvmcross TabBarController ViewModel Init() not called?未调用 mvvmcross TabBarController ViewModel Init()?
【发布时间】:2013-06-27 20:06:36
【问题描述】:

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

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

编辑

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

【问题讨论】:

    标签: xamarin.ios mvvmcross


    【解决方案1】:

    如果使用默认 ViewModel 定位器创建,则在 MvxViewModel 上调用Construction-Initialize-ReloadState-Start (C-I-R-S) 序列 - 这就是调用ShowViewModel 时发生的情况。

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

    真正的区别在于:

    • 标签ViewModels 只是INotifyPropertyChanged 对象
    • 页面级MvxViewModels 也是INotifyPropertyChanged 对象,但您进一步希望在导航中对其进行初始化。

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

    【讨论】:

    • 太好了,这就是我怀疑的情况。我将不得不做一些重构来完成这项工作,但这确实是可能的。感谢您的意见。
    • 仅供参考,我通过在 ViewDidShow 重载中的视图模型上调用 init 来使其工作。由于某种原因,如果视图模型由 mvvmcross 初始化,我无法在视图模型的构造函数中调用 Init。不知道为什么,但无论如何,如果我在 mvvmcross 调用的动作/方法之外调用 init,它似乎工作正常。
    猜你喜欢
    • 1970-01-01
    • 2014-05-13
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    相关资源
    最近更新 更多