1

在 Windows 应用商店应用程序的页面之间传递复杂对象的最佳方法是什么?在 MSDN 中,它声明只能传递基本类型的对象以序列化会话状态,但我不打算序列化会话状态,因为我的应用程序将在应用程序启动时注销并要求登录凭据下一次。我计划在用户点击注销或保存按钮时序列化我的数据。

4

3 回答 3

2

假设您将一个 Person 对象传递给 PersonDetailPage。然后这是您在 MainPage(或任何其他页面)上的内容。

假设您正在使用 GridView:

this.Frame.Navigate(typeof(PersonDetailPage), (Person)e.ClickedItem);

然后在 PersonDetailPage 上的 LoadState() 上,您将验证是否传递了参数,然后将该参数归因于变量。

protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
      if (navigationParameter != null)
      {
           person = (Person)navigationParameter;
      }
}
于 2012-12-17T17:04:20.037 回答
0

不序列化会话状态可能会导致用户体验不佳。如果只保存用户注销时的状态,当应用程序挂起并因资源不足而被操作系统终止时,它会丢失状态。

看看应用程序生命周期:一旦用户切换到另一个应用程序并且您的应用程序不再位于前面,它将被暂停 - 这是您保存状态并保留它的最后机会。尽管您的应用程序可以保留在内存中,直到用户切换回来,但如果需要资源,操作系统也会将其关闭。在这种情况下,用户将不得不重新启动它。如果您在应用程序挂起时不保存您的状态,您将失去它并且用户体验将受到影响。

虽然您可能会想出一种保留状态的自定义方式,但我建议您坚持只在 Windows 运行时支持的页面之间传递基本类型。通过这种方式,您可以利用应用程序模板中包含的SuspensionManager来处理大部分工作。在页面之间仅传递基本类型并不难。最好只传递对象 ID(某种唯一标识符)并将对象保存在所有页面都可以访问的其他地方。或者,您可以使您的对象可序列化并将它们作为序列化字符串(XML 或 JSON)传递。

于 2012-12-18T05:50:27.597 回答
0

您可以序列化复杂对象,将其作为字符串传递,然后在第二页反序列化字符串

于 2013-12-02T13:46:52.773 回答