在Windows应用商店应用中的页面之间传递复杂对象的最佳方法是什么?在MSDN中,它声明只能传递基本类型的对象以序列化会话状态,但我不打算序列化会话状态,因为我的应用程序只会在应用程序启动时注销并要求登录凭据下一次。我计划在用户点击注销或保存按钮时序列化我的数据。
答案 0 :(得分: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;
}
}
答案 1 :(得分:0)
不序列化会话状态可能会导致用户的次优体验。如果您只在用户注销时保存状态,则当应用程序挂起时它会松散状态,并且由于资源不足而被操作系统终止。
看看the application lifecycle:一旦用户切换到另一个应用程序并且您的应用程序不在前面,它就会被暂停 - 这是您保存状态并保存的最后机会它。尽管您的应用程序可以留在内存中,直到用户切换回来,但如果需要资源,操作系统也会关闭它。在这种情况下,用户必须重新启动它。如果您在暂停应用程序时未保存状态,则会丢失它并且用户体验将受到影响。
虽然您可能想出一种保留状态的自定义方法,但我建议您坚持只在Windows运行时支持的页面之间传递基本类型。这样,您就可以利用应用程序模板中包含的SuspensionManager来处理大部分工作。在页面之间仅传递基本类型并不困难。最好只传递对象ID(某种类型的唯一标识符),并将对象保存在所有页面都可以访问的其他位置。或者,您可以使对象可序列化并将它们作为序列化字符串(XML或JSON)传递。
答案 2 :(得分:0)
您可以序列化复杂对象,将其作为字符串传递,然后在第二页反序列化字符串