gpt4 book ai didi

android - ReloadState 方法和 MvxViewModel 上的 Init 不冲突吗?

转载 作者:太空狗 更新时间:2023-10-29 14:51:28 25 4
gpt4 key购买 nike

根据这个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 的 subview 模型。这样做会调用 SaveState 方法。现在我们打开表单,做我们的事情,然后调用 this.Close(this);

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

但是 Init 方法将失败,因为我们来自 subview 模型,并且没有给出任何 Intent 作为参数,因此 ReloadState 方法没有机会启动并恢复 stockId。

我很确定我在这里做错了什么,但我不能指责它......

最佳答案

事实证明,我将 MVVMCross 导航与父 Intent 导航混合在一起(由于基类的旧重构)。这些不能一起工作是完全有道理的。

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

  1. 如果 View 模型仍在缓存中(mvvmcross 有 VM 缓存),它会从那里获取 VM,因此,当您在“子项”上调用 close 时,不会调用任何初始化方法(Init、Reload或开始)。
  2. 如果 View 模型不在缓存中,它将重建 VM 并调用 ReloadState 而不是 Init。

关于android - ReloadState 方法和 MvxViewModel 上的 Init 不冲突吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34952174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com