0

我对 Caliburn.Micro 的墓碑机制有疑问。

例如,我有三个视图/视图模型:

  • MainPageViewModel:显示列表中的每个项目
  • DisplayPageViewModel:显示物品的详细信息
  • 维护PageViewModel:添加或编辑一个项目;

我浏览 MainPageVM、DisplayPageVM 和 MaintainPageVM。然后,在 MaintainPageVM 中,我通过navigationService.GoBack();导航回 DisplayPageVM ;. 在 DisplayPageVM 中,我将项目固定为启动,我认为此时 MaintainPageVM 已被删除,尽管它不再处于活动状态。

之后,我导航回 MainPageVM,然后前进到 MaintainPageVM 以创建一个新项目。创建了一个新的 MaintainPageVM 实例,但恢复了之前实例中的值。仅当我通过在 DisplayPageVM(墓碑)中固定要启动的项目来离开应用程序时才会发生这种情况。

这是MaintainPageViewModel 的StorageHandler:

public class MaintainPageStorage : StorageHandler<MaintainPageViewModel>
{
    public override void Configure()
    {
        Property(x => x.Message).
            InPhoneState().
            RestoreAfterActivation();
    }
}

是否有可能我没有正确关闭我的 MaintainPageVM,以便尽管 ViewModel 已停用,但该 ViewModel 的 StorageHandler 仍然处于活动状态?

编辑

我检查了Caliburn.Micro的文档:

public class MaintainPageStorage : StorageHandler<MaintainPageViewModel>
{
    public override void Configure()
    {
        Id(x => x.Name);

        Property(x => x.Duration).
            InPhoneState().
            RestoreAfterActivation();

        Property(x => x.Message).
            InPhoneState().
            RestoreAfterActivation();
    }
}

我必须指定一个 ID。在这种情况下,如果我再次导航到此 ViewModel 以添加新项目,则不会恢复墓碑化的 MaintainPageVM。

在另一种情况下,问题仍然存在:我导航到DisplayPageVM以显示一个项目,然后导航到MaintainPageVM以编辑该项目并返回而不保存。在 DisplayPageVM 中,我将项目固定为启动(MaintainPageVM 被删除)并再次转到 MaintainPageVm。墓碑版本再次恢复。

因此,尽管我已经从它导航回来,但我仍然存在MaintainPageVM 在内存中的问题。

4

0 回答 0