Windows phone 7 导航到详细信息页面-共享视图模型或导航查询字符串?

Windows phone 7 导航到详细信息页面-共享视图模型或导航查询字符串?,windows-phone-7,mvvm,navigation,tombstoning,Windows Phone 7,Mvvm,Navigation,Tombstoning,从列表页面导航到详细信息页面时,有两种在页面之间传递选择数据的高级方法:共享视图模型实例和在导航Uri的查询字符串中传递标识符 我应该用哪一种?使用一种方法而不是另一种方法是否存在任何问题(从视图模型访问当前Uri、导航事件的时间安排等)?我个人建议在导航Uri查询字符串中传递标识符。当应用程序在逻辑删除后重新启用时,这些URI将被还原以形成后堆栈 当应用程序被删除后恢复时,您可以从应用程序状态重新创建应用程序视图模型,然后使用URI查询字符串将新创建的视图与其所需的DataContext“结合

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


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

我个人建议在导航Uri查询字符串中传递标识符。当应用程序在逻辑删除后重新启用时,这些URI将被还原以形成后堆栈

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

请参见此处的工作示例:


这两种方法都很好

真正的区别在于墓碑过程

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

  • 在牢房里。(本地人)
  • 使用特定的隔离存储管理
如果选择共享viewmodel,则在导航到时必须保存id

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


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

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