【问题标题】:How to save property after tombstoning?立碑后如何保存财产?
【发布时间】:2011-11-07 14:47:04
【问题描述】:

我的应用程序中的每个页面都有一些属性 OwnerId。我需要这些属性来创建 HttpWebRequest 并获取一些数据。但是当应用程序停用并再次激活页面时,页面被删除并再次创建,所以这些属性为0。我无法将这些属性保存在 PhoneApplicationPage.State 中,因为这些属性对于不同的页面是不同的,所以当我返回两次时我会出错。我想在从 NavigationService.BackStack 页面激活应用程序后获取它的属性。但我不确定它是否正确。我该怎么做?

【问题讨论】:

  • Aram -- 不确定问题是否很清楚。你能添加一些示例代码吗?
  • 另外,PhoneApplicationService.Current.State 即使在 Tombstoning 上也应该保持不变。在 OnNavigatedTo/OnNavigatedFrom 期间,每个页面都可以访问它自己的状态字典。
  • @samidip 对不起,我的英语不好,我会尽力解释。假设我有一些页面显示有关用户的信息,我必须有 userId 来显示有关该用户的信息,这个 userId 是我的 OwnerId,每个页面都有。当应用程序停用时,我的 OwnerId 变为 0,因此我无法显示有关用户的信息。我想为每个页面实例保存 OwnerId,当应用程序激活时我可以恢复它的值。
  • @samidip 我知道,但是对于页面的每个实例, OwnerId 的值可能不同,所以我不能只存储在 PhoneApplicatonPage.State 或 PhoneApplicationService.Current.State

标签: windows-phone-7 navigation tombstoning


【解决方案1】:

Aram .. 感谢您更好地解释问题。

现在,当您的应用程序处于前台时,您如何管理所有这些不同的 OwnerID?收藏?我猜您没有同一页面的多个实例;而是传递查询参数以指示应使用哪个 OwnerID/UserID 来显示适当的用户信息。您可以在应用程序生命周期中将整个集合放入带有键和水合物/脱水的状态字典中。有意义吗?

谢谢!

【讨论】:

  • 感谢您尝试帮助我。对不起,我不太了解你。每次我发布一些 HttpWebRequest 并从响应中我得到 OwnerId。我的应用除了用户信息外,还有照片、视频等页面,照片页面也获取用户照片依赖 OwnerId。
  • 我向 API 发出请求,但我希望不使用查询字符串。
【解决方案2】:

我不是 100% 清楚您是需要为每个页面设置一个设置,还是只需要为应用设置一个设置。无论哪种情况,您的最佳选择 (IMO) 都是 IsolatedStorageSettings (http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragesettings(v=vs.95).aspx)

如果您只需要一个设置,那么没有问题,但如果您需要为每个页面设置一个,则需要做一些丑陋的事情,例如使用页面名称作为键。

【讨论】:

  • 对不起我的英语不好,我会尽力解释。假设我有一些页面显示有关用户的信息,我必须有 userId 来显示有关该用户的信息,这个 userId 是我的 OwnerId,每个页面都有。当应用程序停用时,我的 OwnerId 变为 0,因此我无法显示有关用户的信息。我想为每个页面实例保存 OwnerId,当应用程序激活时我可以恢复它的值。
  • 感谢您的澄清。我会做 samidip 在他的回答中建议的,或者,如果您需要更多控制,将所有 ID、页面等序列化为 XML(这允许您添加您可能需要的任何信息,并且在您需要新信息时更容易处理未来更新中的信息)。
  • 请看我对 samidip 回答的评论。感谢您尝试帮助我。
  • 如果您在导航到使用它的页面之前知道 ownerId,那么您应该将它放在页面的查询字符串中。然后你根本不需要做任何事情。如果您在页面加载后获得了 Id,那么您可以执行一些操作,例如在每个页面的查询字符串中添加一个唯一编号(只需增加一个整数:?pageId=23),然后您可以保存 pageIds 和 ownerIds 的字典墓碑。我真的认为查询字符串是在墓碑化后识别页面实例的最简单方法。
  • 导航后得到 OwnerId,所以无法使用查询字符串。我想保留一堆 OwnerId ,每次我导航回来时,从堆栈中偷看,当我从页面推送到堆栈时。并将堆栈保存在 PhoneApplicationServie.State 上。您如何看待这个想法?
猜你喜欢
  • 2018-11-01
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多