代码之家  ›  专栏  ›  技术社区  ›  NER1808

Windows Phone 7:确定在应用程序激活事件期间激活的页

  •  0
  • NER1808  · 技术社区  · 14 年前

    当一个逻辑删除的应用程序被重新激活时,我遵循恢复持久和非持久状态及对象的一般最佳实践原则。可以在这篇很好的微软文章中找到

    here

    示例仅显示应用程序主页的简单重新激活。但是,由于我的应用程序有多个页面(其中任何一个页面都可以进行逻辑删除并重新激活),并且每个页面都绑定到不同的ViewModel对象。我想知道如何确定最终将激活哪个页面,以便可以选择反序列化并恢复该页面的正确ViewModel对象。

    或者是恢复所有视图模型的最佳实践,还是有其他的设计模式?

    1 回复  |  直到 9 年前
        1
  •  1
  •   indyfromoz    14 年前

    我实现了一个简单的模式-

    1. 在应用程序的激活和停用事件中,我向订阅页发送消息。
    2. 订阅消息的页面执行数据的序列化/反序列化。

    我在用 Laurent Bugnion's excellent MVVMLight library for 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;
       }
    }
    

    我发现使用这个策略,所有与绑定到ViewModel的页面相关的数据都会被正确地保存和恢复。

    HTH,印度弗洛莫兹

    推荐文章