C# 在WP7中的3页应用程序中保存页面状态

C# 在WP7中的3页应用程序中保存页面状态,c#,silverlight,windows-phone-7,page-lifecycle,C#,Silverlight,Windows Phone 7,Page Lifecycle,这是我在这里的第一个问题,就我所寻找的而言,我没有找到解决问题的方法。我正在为WP7编写我的第一个rssreader应用程序,我面临页面状态问题。我有3页,导航是这样的 主页>>>listitemspage>>>detailspage。Mainpage是一个带有预配置提要类别项(URL和名称)的数据绑定模型,listitempage是一个我实现了webclient来读取提要项的页面,detailspage是我从listitempage传递所选提要项的详细信息的页面。页面状态在以下情况下工作: m

这是我在这里的第一个问题,就我所寻找的而言,我没有找到解决问题的方法。我正在为WP7编写我的第一个rssreader应用程序,我面临页面状态问题。我有3页,导航是这样的 主页>>>listitemspage>>>detailspage。Mainpage是一个带有预配置提要类别项(URL和名称)的数据绑定模型,listitempage是一个我实现了webclient来读取提要项的页面,detailspage是我从listitempage传递所选提要项的详细信息的页面。页面状态在以下情况下工作:

mainpage >>> start button >>> back button (OK)<br/>
listitempage >>> start button >>> back button (Doesn't work)<br/>
detailspage >>> start button >>> back button (OK)<br/>
mainpage>>>开始按钮>>>返回按钮(确定)
listitempage>>>开始按钮>>>后退按钮(不工作)
详细信息页面>>>开始按钮>>>返回按钮(确定)
在详细信息中,我使用OnNavigatedTo/From和state.TryGetValue保存页面状态 这似乎是可行的,但是如果我创建了一个带有浏览器任务的按钮,这样当浏览器打开并且用户按下“后退”按钮时,用户就可以导航到完整的文章,那么“详细信息”页面的状态就会起作用。如果用户再次按下后退按钮,则应用程序将退出,而不是导航回listitempage。所以我也有这个问题:

detailspage >>> browserbuttontask >>> backbutton >>> restorepage >>> backbutton->exit<br/>
detailspage>>>浏览器按钮任务>>backbutton>>>恢复页面>>backbutton->退出

有什么想法吗?

我建议在codeplex上使用Matt Lacey(Windows Phone用户组成员)编写的Tombstone helper

它将非常容易地解决您的所有问题,或者至少向您展示如何将页面状态写入隔离存储以供长期使用(请记住,状态缓存仅在设备通电时存在,只要手机不需要清除内存)

希望这有帮助 Rgds
Simon

如果您想保存页面状态而不影响IsolatedStorage,请尝试SterlingDB。它使用隔离存储,但设置和使用非常简单。您可以通过nuget添加英镑。您必须将想要持久化的数据粘贴到类中,但保存和加载很简单

除此之外,你可能还想看看Micro。它将页面生命周期添加到视图模型中,如OnInitialize、OnActivate和OnActivate。它还为WP7添加了一些不错的功能,比如自动将ViewModel上的属性持久化为隔离存储或电话状态


在将状态恢复到列表页时,应用程序似乎在抛出异常,这会终止应用程序


您是否尝试过在附加调试程序的情况下执行所有这些操作?它应该会向您显示抛出了什么异常以及在哪里。

感谢您的回复。我已经用过了,但没有结果。不幸的是,Tombstone助手甚至没有正确保存详细信息页面状态。我用于保存详细信息页面的当前页面状态的方法工作得很好(除了浏览器任务的问题),但我也希望listitemspage有类似的功能,我已经没有什么想法了。我想用页面状态来做这件事,而不必使用独立存储。如果可能的话。谢谢Derek的建议。虽然它们看起来太难了,我无法实现它们(我还是一个乞丐)。现在让我们重点讨论如何从listitemspage恢复数据。我试图在该页面上实现OnNavigatedTo/From和State.TryGetValue,但我猜当调用OnNavigateTo时,该页面从未重新加载以运行webclient事件来获取项目。有没有办法做到这一点?因此,当你点击浏览器时,你的应用程序堆栈就会被清除。它确实返回到您的详细信息页面的原因是因为它在浏览器的后台堆栈中。在这一点上,您将需要一些逻辑来确定您来自何处,以及它应该在另一个后退按钮上转到何处。查看如何订阅OnBackKeyPress事件。我用新的mango SDK更新了代码,状态处理现在运行良好。谢谢你们的回复!