我刚刚遇到了WP7中臭名昭着的墓碑问题/问题。比方说,我有3页,FirstPage.xaml,SecondPage.xaml和ThirdPage.xaml。自然流动将是:WP7中的墓碑问题,不知道是否需要恢复或实例化/查询新数据
FirstPage.xaml - > SecondPage.xaml - > ThirdPage.xaml
换句话说,
主页 - >与对象列表页面 - >页显示一个对象详细从前一页
当我从FirstPage.xaml到SecondPage.xaml,我必须做一个数据库查询来获得一个列表在SecondPage.xaml。然后我需要从SecondPage.xaml转到ThirdPage.xaml(在我从列表中选择一个MyObject之后)。在这一点上,墓碑对我来说变得非常混乱。
我知道什么时候去FirstPage.xaml - > SecondPage.xaml,调用SecondPage.xaml.cs的构造函数。我知道什么时候去ThirdPage.xaml - > SecondPage.xaml(返回,通过点击后退按钮或NavigationService.GoBack()),SecondPage.xaml.cs的构造函数不会被调用。当我从SecondPage.xaml移动到ThirdPage.xaml时,我将视图模型(VM)对象存储在PhoneApplicationService.Current.State(SecondPage.xaml.cs.OnPageNavigatedFrom())中。我的(有缺陷的)策略是,如果SecondPage.xaml.cs的构造函数在一个实例(FirstPage.xaml - > SecondPage.xaml)中被调用,但在另一个实例(ThirdPage.xaml - >)中被调用, SecondPage.xaml),然后我可以在构造函数中设置布尔标志,无论是执行新的数据库查询还是恢复页面的状态(来自PhoneApplication.Current.State)。布尔标志最初设置为false,并且只在SecondPage.xaml.cs的构造函数中设置为true。
我认为这工作得很好,但当我按下开始按钮离开应用程序,然后点击返回按钮返回到应用程序,SecondPage.xaml.cs的构造函数被调用。所以我做另一个新的数据库查询,而不是恢复状态,这不是预期的行为。
我的问题是,我怎么知道何时做一个新鲜的数据库查询vs恢复当用户点击开始,然后返回到应用程序?我想过如何自己解决这个问题,但我想到的大多数问题都是错误的;这似乎是不自然的,好像我正在修理让事情发挥作用。例如,我想我可以传递从FirstPage.xaml到SecondPage.xaml的查询字符串(即/SecondPage.xaml?freshDbQuery=1),但是当我从ThirdPage.xaml移回到SecondPage.xaml时,该查询字符串键值对,freshDbQuery = 1,总是如此! (所以你可以说,我不太了解wp7)。
任何帮助表示赞赏。
谢谢。直到今天早上,我再也没有重新讨论过这个问题(当时它再次困扰我)。它工作得很好。但它似乎很特别这个mvvm +墓碑组合。我明白mvvm,这实际上是一个很好的设计模式。然而,必须有一种更节制的状态(我的意思是整个状态;这意味着MVVM的ViewModel部分的view +模型)。有没有一个通用的框架来处理这个问题? – jake
上面列出的方法适用于我的模拟器。然而,当我在真实设备上测试它时(按回家按钮,然后按下后退按钮),我所得到的只是一个页面,显示正在运行进度条的“恢复”。有任何想法吗? – jake
@ user373312如果它“卡住”显示正在恢复,请检查VS是否正在等待您重新启动调试会话(F5) –