6

我如何使用 mvvm light 实现状态处理(运行/恢复/终止状态)。面临的主要问题是导航。我完全不受导航堆栈的控制。我如何使用 MVVM Light 有效地管理它。

4

2 回答 2

4

使用 GridView 或 SplitView 模板启动一个新项目,并查看Common文件夹中的SuspensionManager.cs 。它有一个名为 RegisterFrame 的方法,当被调用时,它会开始跟踪框架中的所有导航事件,并在应用程序挂起和恢复时尝试保存关闭和恢复状态。

应用程序主框架在 App.OnLaunched (App.xaml.cs) 中向 SuspensionManager 注册,并在 App.OnSuspending 中完成保存。

最后,看看LayoutAwarePage.cs,也在Common文件夹中。您可以从 LayoutAwarePage 继承来获得 Portrait 和 Snapped 设计时支持。它还尝试通过利用 SuspensionManager 来处理导航状态缓存。因此,无论您的页面是从另一个页面导航到还是作为简历的一部分,都会使用正确的数据调用虚拟方法LoadState 。

显然,这种模式直接在页面本身中管理导航状态,但是您可以调整这种模式以创建一种“SuspensionService”,您的 ViewModel 可以以同样的方式利用它。

于 2012-07-30T19:08:16.387 回答
1

您可能对 CodePlex 和 NuGet 上免费提供的开源Okra App Framework感兴趣(免责声明:我是该项目的首席开发人员)。这是从头开始为 Windows 8 应用程序设计的,特别是那些使用 MVVM 模式的应用程序(您仍然可以使用 MVVM Light 基类来定义您的视图模型)。

特别感兴趣的包括,

  • 了解 Windows 8 导航模型的导航管理器
  • 可以在应用程序终止时自动保持其状态的导航堆栈
  • 一种视图模型保持自己状态的机制(通过一个简单的接口)
  • 自动视图和视图模型构建和连接(默认使用 MEF 属性)
于 2012-08-15T12:10:08.847 回答