我对Caliburn.Micro的墓碑机制存在问题。
例如,我有三个Views / ViewModel:
我浏览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在内存中的问题,尽管我已经从中导航过了。