我正在为我的应用程序使用IsolatedStorageSettings.ApplicationSettings。与隔离存储相关的所有代码都发生在我的Application_Launching,Application_Activated,Application_Closing和Application_Deactivated方法中,如下所示:
public IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
private void Application_Launching(object sender, LaunchingEventArgs e)
{
if (settings.Contains("myObjList"))
{
App.ObjList = (ObservableCollection<myObj>)settings["myObjList"];
}
else
{
settings.Add("myObjList", App.ObjList);
}
}
private void Application_Activated(object sender, ActivatedEventArgs e)
{
if (settings.Contains("myObjList"))
{
App.ObjList = (ObservableCollection<myObj>)settings["myObjList"];
}
else
{
settings.Add("myObjList", App.ObjList);
}
}
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
settings["myObjList"] = App.ObjList;
settings.Save();
}
private void Application_Closing(object sender, ClosingEventArgs e)
{
settings["myObjList"] = App.ObjList;
settings.Save();
}
所有这一切都发生在默认情况下为每个新应用程序创建的App.xaml.cs文件中。
我尝试使用后退按钮以及使用Windows按钮退出应用程序。让仿真器保持运行,我尝试使用后退按钮重新打开应用程序,然后导航到应用程序列表并打开。
我遇到的问题是在加载或激活settings.Contains [“myObjList”]返回false并继续将键重新添加到设置中。
有没有人知道为什么我的设置键(和值)不会持续存在?
答案 0 :(得分:3)
你的班级是myObj Serializable吗?根据经验,如果没有,则不会抛出任何错误,它根本不会添加到IsolatedStorage。
您可以使用类中的DataContract和DataMember属性来启用此功能,如下所示。
[DataContract]
public class myObj
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Id { get; set; }
[DataMember]
public string Phone { get; set; }
答案 1 :(得分:2)
我看到了一些问题:
IsolatedStorageSettings doc明确表示不调用Save(),因为它不是线程安全的(向下滚动到WP的平台说明)并可能引发异常(并导致你的设置不能保存。)
这里似乎不是这种情况,但是使用字符串“myObjList”非常危险,因为它很容易被误解。我会把它放在常量中并排除任何输入错误
In my experience IsolatedStorageSettings在当前的WP7版本上不是很强大。您最好创建一个类并将其序列化为IsolatedStorage文件。无论如何继续你的应用程序你可能会有更多的东西要保存,你会有更清晰的代码。