我正在尝试将模型保存在独立存储中:
var settings = IsolatedStorageSettings.ApplicationSettings;
CurrentPlaceNowModel model = new CurrentPlaceNowModel();
settings.TryGetValue<CurrentPlaceNowModel>("model", out model);
if (model == null)
{
MessageBox.Show("NULL");
settings.Add("model", new CurrentPlaceNowModel());
settings.Save();
}
else
MessageBox.Show("NOT NULL");
当我启动emu i ofcourse时出现“NULL”,但是如果我关闭emu上的app并从菜单中再次启动它(为什么我再次在Visual Studio中启动它),为什么还要继续使用它。
第二次我不能得到“NOT NULL”吗?
答案 0 :(得分:2)
我会以不同方式执行此操作并进行特定检查以查看密钥是否存在。
CurrentPlaceNowModel model;
using (var settings = IsolatedStorageSettings.ApplicationSettings)
{
if (settings.Contains("MODEL"))
{
model = settings["MODEL"] as CurrentPlaceNowModel;
}
else
{
model = new CurrentPlaceNowModel();
settings.Add("MODEL", model);
settings.Save();
}
}
使用IsolatedStorage的这种模式肯定有效。
如果无法使用DataContractSerializer序列化CurrentPlaceNowModel
,那么这将无效的唯一原因。这就是ApplicationSettings在内部用于序列化对象的内容
你可以自己用这种方式对它进行测试,看看会发生什么。
答案 1 :(得分:1)
我刚刚注意到你做错了什么:
if (model == null)
{
MessageBox.Show("NULL");
settings.Add("model", model);
}
这相当于调用settings.Add("model", null)
- 所以你希望以后如何获得非空值?我怀疑你想要:
CurrentPlaceNowModel model;
if (!settings.TryGetValue<CurrentPlaceNowModel>("model", out model))
{
model = new CurrentPlaceNowModel();
settings.Add("model", model);
}