【问题标题】:Windows Phone 7: Establishing which page is being activated during the Application_Activated eventWindows Phone 7:确定在 Application_Activated 事件期间激活哪个页面
【发布时间】:2010-11-15 20:24:35
【问题描述】:

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

here

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

或者是恢复所有 ViewModel 的最佳做法,或者是否有其他设计模式?

【问题讨论】:

    标签: c# windows-phone-7 application-lifecycle tombstoning


    【解决方案1】:

    我已经实现了一个简单的模式,最好描述为 -

    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,indyfromoz

    【讨论】:

    • 谢谢。看起来很棒。我也在使用 MVVM Light。今天早上我会试试这个模式,让你知道。我对 MVVM 还很陌生,还没有使用过消息传递框架!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多