从列表页面导航到详细信息页面时,有两种高级方式在页面之间传递选择数据:共享视图模型实例和在导航 Uri 的查询字符串中传递标识符。
我应该使用哪个?使用一种方法而不是另一种方法(从视图模型访问当前 Uri、导航事件的时间等)是否存在任何问题?
从列表页面导航到详细信息页面时,有两种高级方式在页面之间传递选择数据:共享视图模型实例和在导航 Uri 的查询字符串中传递标识符。
我应该使用哪个?使用一种方法而不是另一种方法(从视图模型访问当前 Uri、导航事件的时间等)是否存在任何问题?
我个人建议将标识符作为导航 URI 查询字符串的一部分传递。当您的应用程序在墓碑化后重新启用时,这些 URI 将被恢复以形成后台堆栈。
当您的应用程序在被删除后恢复时,您可以从应用程序状态重新创建应用程序视图模型,然后使用 URI 查询字符串将新创建的视图与其所需的 DataContext“结合”。
请参阅此处的工作示例:
http://www.scottlogic.co.uk/blog/colin/2011/05/a-simple-windows-phone-7-mvvm-tombstoning-example/
这两种方法都很好。
真正的区别在于墓碑过程。
当你回到你的应用程序时,你的对象的 id 将被解析:
如果您选择共享视图模型,则必须在导航到时保存 id。
两者的混合似乎是最好的:您使用 queryString 导航,并使用 sharedViewModel,因此当您导航到新页面时,您会从 queryString 获取 id 并使用该 id 从 sharedViewModel 获取数据!
您可以管理 SharedViewModel 以将数据保存在 IsolatedStorage 中,以便在墓碑化时恢复 Web 加载的数据