根据这个https://github.com/MvvmCross/MvvmCross/wiki/View-Model-Lifecycle,我们应该实现保存状态和重新加载状态来处理tombstoning。
但是,如果我们在Init方法中有一个值参数,会发生什么呢?
示例:
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的机会。
我很确定我做错了什么,但我不能用我的手指.
发布于 2016-01-27 10:20:30
结果是,我将MVVMCross导航与父意图导航(由于以前的基类重构)混为一谈。这是完全合理的,这些不会一起工作。
我切换到完整的MVVMCross导航,有两种情况:
https://stackoverflow.com/questions/34952174
复制相似问题