Caliburn.Micro在导航后恢复ViewModel

时间:2015-03-19 10:10:33

标签: windows-phone-8 navigation windows-phone caliburn.micro tombstoning

我对Caliburn.Micro的墓碑机制存在问题。

例如,我有三个Views / ViewModel:

  • MainPageViewModel:显示列表中的每个项目
  • DisplayPageViewModel:显示详细的商品信息
  • MaintainPageViewModel:添加或编辑项目;

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

之后,我导航回MainPageVM,然后导航到MaintainPageVM以创建一个新项目。创建了一个新的MaintainPageVM实例,但恢复了之前实例的值。如果我通过在DisplayPageVM(墓碑)中固定一个项目来离开应用程序,这只会发生。

这是我的MaintainViewViewModel的StorageHandler:

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

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

修改

我检查了Caliburn.Micro的documentation

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在内存中的问题,尽管我已经从中导航过了。

0 个答案:

没有答案