我对 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 在内存中的问题。