Windows Phone 7:确定在Application_Actived Event期间激活哪个页面
-
10-10-2019 - |
题
我正在遵循恢复持久性的一般最佳实践原则,当重新激活墓碑应用程序时,没有持久状态和对象。可以在这篇非常好的Microsoft文章中找到
样品仅显示对应用程序主页的简单重新激活。但是,由于我的应用程序具有多个页面(其中任何页面都可以被墓碑和重新激活),并且每个页面都与其他视图模型对象结合。我想知道如何确定哪个页面最终将被激活,以便我可以选择该页面的对象并恢复正确的视图模型对象。
还是恢复所有ViewModels的最佳实践,还是有其他设计模式?
解决方案
我实施了一种最能描述为 -
- 在应用程序的激活和停用事件中,我向订阅页面发送了一条消息。
- 订阅该消息的页面进行数据的序列化/避难所化。
我在用 Laurent Bugnion的出色MVVMLIGHT库,用于Windows Phone 7. 。这是一些说明消息广播的示例代码 -
// Ensure that application state is restored appropriately
private void Application_Activated(object sender, ActivatedEventArgs e)
{
Messenger.Default.Send(new NotificationMessage<AppEvent>(AppEvent.Activated, string.Empty));
}
// Ensure that required application state is persisted here.
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
Messenger.Default.Send(new NotificationMessage<AppEvent>(AppEvent.Deactivated, string.Empty));
}
在ViewModel类的构造函数中,我设置了通知消息的订阅 -
// Register for application event notifications
Messenger.Default.Register<NotificationMessage<AppEvent>>(this, n =>
{
switch (n.Content)
{
case AppEvent.Deactivated:
// Save state here
break;
case AppEvent.Activate:
// Restore state here
break;
}
}
我发现,通过这种策略,与视图模型绑定的页面相关的所有数据都可以保存并正确恢复。
Hth,Indyfromoz
不隶属于 StackOverflow