首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReloadState方法不是与MvxViewModel上的Init冲突吗?

ReloadState方法不是与MvxViewModel上的Init冲突吗?
EN

Stack Overflow用户
提问于 2016-01-22 17:03:23
回答 1查看 350关注 0票数 3

根据这个https://github.com/MvvmCross/MvvmCross/wiki/View-Model-Lifecycle,我们应该实现保存状态和重新加载状态来处理tombstoning。

但是,如果我们在Init方法中有一个值参数,会发生什么呢?

示例:

代码语言:javascript
复制
public StockDetailViewModel
{
    int stockId;

    ...

    void Init(int stockIdAsIntent)
    {
        stockId = stockIdAsIntent
    }

    protected override void ReloadFromBundle(IMvxBundle state)
    {
        id = int.Parse(state.Data["id"]);
    }

    protected override void SaveStateToBundle(IMvxBundle bundle)
    {
        bundle.Data["id"] = stockId;
    }

    async void Start()
    {
         stockModel = StockService.Get(stockId);
    }

    ...
}

现在假设我们导航到一个名为StockFormViewModel的子视图模型。为此,调用SaveState方法。现在我们打开表单,做我们的业务,然后调用this.Close(this);

如果我们遵循CIRS,首先调用Init,然后调用ReloadState

但是Init方法将失败,因为我们来自一个子视图模型,并且没有给出任何作为参数的意图,也没有给ReloadState方法注入和恢复stockId的机会。

我很确定我做错了什么,但我不能用我的手指.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-27 10:20:30

结果是,我将MVVMCross导航与父意图导航(由于以前的基类重构)混为一谈。这是完全合理的,这些不会一起工作。

我切换到完整的MVVMCross导航,有两种情况:

  1. 如果视图模型仍然在缓存中(mvvmcross有一个VM缓存),它会从那里获取VM,因此,当您调用“子”时,没有调用任何初始化方法(Init、Reload或Start)。
  2. 如果视图模型不在缓存中,它将重构VM并调用ReloadState而不是Init。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34952174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档