积极答复者
墓碑机制中数据的恢复

问题
答案
-
在 OnNavigatedTo 中加入 this.Loaded += MainPage_Loaded; 然后把
DopoolState state = null;
state = app.DopState;
if (state != null && state.CpXml != null)
{
int count = this.CP_List.Items.Count;
ScrollViewer scrollViewer = FindChildOfType<ScrollViewer>(this.CP_List);
if (scrollViewer != null)
scrollViewer.ScrollToVerticalOffset(state.Cp_ScrollOffset);
}
放到 MainPage_Loaded中
ok,解决问题了
- 已建议为答案 XuesongGaoModerator 2011年12月20日 7:12
- 已标记为答案 Shi Ding 2011年12月28日 8:55
全部回复
-
您可以考虑在先判断解析的XML是否存在,如果不存在重新解析XML。
另:应用程序生命周期的理解也很重要,请参考MSDN的文档,或者下面的解释。
在Windows Phone Mango开发实践——应用程序生命周期
应用程序生命周期模型
Windows Phone应用程序生命周期的所有元素,并重点讲述在生命周期的每一过程应采取的行动。本节提供有关操作系统和用户触发应用程序状态变化的背景,以及应用程序应执行的事件处理方法。
图1-1 应用程序生命周期
激活事件
当应用程序从休眠或者逻辑删除状态返回时,将调用激活事件(Activated Event)。操作系统检查应用程序的IsApplicationInstancePreserved属性,以确定应用程序从休眠状态还是从逻辑删除状态返回。如果IsApplicationInstancePreserved为true表示应用程序处于休眠状态,操作系统从内存中恢复应用程序的状态。如果IsApplicationInstancePreserved为false表示应用程序处于逻辑删除状态,应用程序将使用状态字典恢复逻辑删除前的状态。请注意不要在激活事件中执行资源密集型的任务,比如从独立存储空间或者网络加载资源,这些无疑都增加了应用程序重新恢复所消耗的时间;最佳的做法是在应用程序启动后在后台线程上执行这类操作。
OnNavigatedTo方法
当用户导航到页面时调用页面的OnNavigatedTo(NavigationEventArgs)方法,包括应用程序第一次启动,或者应用程序从休眠、逻辑删除状态被重新加载。在此方法中,应检查页面是否是新的实例,如果不是则需重新加载状态数据。如果是新的实例,则从页面的状态字典中读取数据,恢复页面的UI状态。
Xuesong- 已编辑 XuesongGaoModerator 2011年12月20日 5:05
-
解析xml是没问题的,我单步调试看过。我贴点代码上来帮我看看
public MainPage()
{
InitializeComponent();
if (app.IsLaunched)//以下为下载并解析xml
{
this.m_InterFaceData.GetInterface();
this.m_InterFaceData.LoadingCompleteEvent += new InterfaceLoading(PopupEnd);
}
else // 以下只为解析xml
{
this.m_InterFaceData.GetLastState();
}
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)//加载数据
{
DopoolState state = null;
state = app.DopState; //记录了切换到后台前的数据,此处获得,且是没有问题的
if (state != null && state.CpXml != null)
{
int count = this.CP_List.Items.Count;//这里count就为 0 了,从而导致下面的 scrollViewer 为 null
ScrollViewer scrollViewer = FindChildOfType<ScrollViewer>(this.CP_List);
if (scrollViewer != null)
scrollViewer.ScrollToVerticalOffset(state.Cp_ScrollOffset);
}
-
在 OnNavigatedTo 中加入 this.Loaded += MainPage_Loaded; 然后把
DopoolState state = null;
state = app.DopState;
if (state != null && state.CpXml != null)
{
int count = this.CP_List.Items.Count;
ScrollViewer scrollViewer = FindChildOfType<ScrollViewer>(this.CP_List);
if (scrollViewer != null)
scrollViewer.ScrollToVerticalOffset(state.Cp_ScrollOffset);
}
放到 MainPage_Loaded中
ok,解决问题了
- 已建议为答案 XuesongGaoModerator 2011年12月20日 7:12
- 已标记为答案 Shi Ding 2011年12月28日 8:55
-
原先没有加 loaded事件,但是loaded加在构造函数中也没问题
- 已建议为答案 XuesongGaoModerator 2011年12月20日 7:12
- 取消建议作为答案 XuesongGaoModerator 2011年12月20日 7:30