您的位置:首页 > 其它

Windows Phone开发之独立存储二

2012-05-28 23:52 375 查看
问题现象:

在实际应用过程中,常常是在操作一个程序时,会突然插入新的任务,当前任务就要提交到后台,去执行新的程序。正比如,一个用户正在注册一个网站,正在填写表单信息,但是一个优先级更高的任务需要解决,这样会用到Back或Start按键来选择其他操作。如果注册表单的数据不保存的话,在重新加载该页面时可能会丢失数据,这对用户来说是很差的体验。本篇就要解决这样的问题。

程序案例:

MainPage只有一个TextBox。有TextBox的myTextBox_TextChanged事件和MainPage的Root_Loaded事件:

流程是这样的:

首先,在TextBox输入内容,根据myTextBox_TextChanged事件保存到phoneAppService.State中,通过APP.xaml.cs文件中的Application_Launching、Application_Activated、Application_Deactivated、Application_Closing事件来保存和读取phoneAppService.State数据到独立存储IsolatedStorageSetting中。

因为phoneAppService.State数据在Back或Start之后会被内存删掉的,只能保存到独立存储的特殊功能上。

切记:模拟器重启(相当于真机重启)之后都不会保存。

private void myTextBox_TextChanged(object sender, TextChangedEventArgs e)
{ //保存文本框的内容
PhoneApplicationService phoneAppService = PhoneApplicationService.Current;
phoneAppService.State["myValue"] = myTextBox.Text;
}
private void Root_Loaded(object sender, RoutedEventArgs e)
{ PhoneApplicationService phoneAppService = PhoneApplicationService.Current;
if (phoneAppService.State.ContainsKey("myValue")) {
myTextBox.Text = phoneAppService.State["myValue"].ToString();
}
}

-------------------------------

APP.xaml.cs文件:

// 应用程序启动(例如,从“开始”菜单启动)时执行的代码
// 此代码在重新激活应用程序时不执行
private void Application_Launching(object sender, LaunchingEventArgs e)
{
LoadMyValue();
}

// 激活应用程序(置于前台)时执行的代码
// 此代码在首次启动应用程序时不执行
private void Application_Activated(object sender, ActivatedEventArgs e)
{
LoadMyValue();
}

// 停用应用程序(发送到后台)时执行的代码
// 此代码在应用程序关闭时不执行
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
SaveMyValue();
}

// 应用程序关闭(例如,用户点击“后退”)时执行的代码
// 此代码在停用应用程序时不执行
private void Application_Closing(object sender, ClosingEventArgs e)
{
SaveMyValue();
}

private void SaveMyValue() {

PhoneApplicationService phoneAppService = PhoneApplicationService.Current;
IsolatedStorageSettings setting = IsolatedStorageSettings.ApplicationSettings;
if (phoneAppService.State.ContainsKey("myValue"))
{
setting["myValue"] = phoneAppService.State["myValue"];
}
}
private void LoadMyValue()
{
PhoneApplicationService phoneAppService = PhoneApplicationService.Current;
IsolatedStorageSettings setting = IsolatedStorageSettings.ApplicationSettings;
if (setting.Contains("myValue"))
{
phoneAppService.State["myValue"] = setting["myValue"];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: