根据这个https://github.com/MvvmCross/MvvmCross/wiki/View-Model-Lifecycle,我们应该实现保存状态和重载状态来处理逻辑删除。
但是如果我们在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。
我很确定我在这里做错了什么,但我不能把手指放在上面......
答案 0 :(得分:0)
事实证明,我将MVVMCross导航与父目标导航混合(由于基类的旧重构)。 完全可以理解,这些不会一起工作。
我切换到完整的MVVMCross导航,有了这个,有两种情况: