【问题标题】:Navigating to a details page - shared view model or navigation query string?导航到详细信息页面 - 共享视图模型或导航查询字符串?
【发布时间】:2011-07-29 00:18:51
【问题描述】:

从列表页面导航到详细信息页面时,有两种高级方式在页面之间传递选择数据:共享视图模型实例和在导航 Uri 的查询字符串中传递标识符。

我应该使用哪个?使用一种方法而不是另一种方法是否存在任何问题(从视图模型访问当前 Uri、导航事件的时间安排等)?

【问题讨论】:

    标签: windows-phone-7 mvvm navigation tombstoning


    【解决方案1】:

    我个人建议将标识符作为导航 URI 查询字符串的一部分传递。当您的应用程序在逻辑删除后重新启用时,这些 URI 将被恢复以形成后台堆栈。

    当您的应用程序在被删除后恢复时,您可以从应用程序状态重新创建应用程序视图模型,然后使用 URI 查询字符串将新创建的视图与其所需的 DataContext“结合”。

    在此处查看工作示例:

    http://www.scottlogic.co.uk/blog/colin/2011/05/a-simple-windows-phone-7-mvvm-tombstoning-example/

    【讨论】:

    • 如何从 ViewModel 访问 Uri?
    • 阅读上面引用的文章!
    • 破坏 MVVM? MVVM 的两个主要租户是 (1) 开发人员-设计人员工作流和 (2) 可单元测试的视图模型。这种方法如何破坏 MVVM?
    • 因为无法测试页面与视图模型的交互
    【解决方案2】:

    这两种方法都很好。

    真正的区别在于墓碑过程

    当您返回应用程序时,您的对象的 id 将被解析:

    • 在查询字符串中。 (母语)
    • 与您的特定隔离存储管理。

    如果您选择共享视图模型,则必须在导航到时保存 id。

    两者的混合似乎是最好的:您使用 queryString 导航,并使用 sharedViewModel,因此当您导航到新页面时,您会从 queryString 获取 id 并使用该 id 从 sharedViewModel 获取数据!

    您可以管理 SharedViewModel 以将数据保存在 IsolatedStorage 中,以便在被删除时恢复 Web 加载的数据

    【讨论】:

      猜你喜欢
      • 2019-08-23
      • 2019-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多