我正在遵循恢复持久性的一般最佳实践原则,当重新激活墓碑应用程序时,没有持久状态和对象。可以在这篇非常好的Microsoft文章中找到

这里

样品仅显示对应用程序主页的简单重新激活。但是,由于我的应用程序具有多个页面(其中任何页面都可以被墓碑和重新激活),并且每个页面都与其他视图模型对象结合。我想知道如何确定哪个页面最终将被激活,以便我可以选择该页面的对象并恢复正确的视图模型对象。

还是恢复所有ViewModels的最佳实践,还是有其他设计模式?

有帮助吗?

解决方案

我实施了一种最能描述为 -

  1. 在应用程序的激活和停用事件中,我向订阅页面发送了一条消息。
  2. 订阅该消息的页面进行数据的序列化/避难所化。

我在用 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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top