现在的位置: 首页 > 综合 > 正文

Windows Phone开发之独立存储二

2013年09月20日 ⁄ 综合 ⁄ 共 2091字 ⁄ 字号 评论关闭

问题现象:
在实际应用过程中,常常是在操作一个程序时,会突然插入新的任务,当前任务就要提交到后台,去执行新的程序。正比如,一个用户正在注册一个网站,正在填写表单信息,但是一个优先级更高的任务需要解决,这样会用到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"];
            }
        }

抱歉!评论已关闭.