2012-03-16 111 views
0

我想救我的独立存储模型:我无法保存到独立存储?

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"); 

当我开始鸸鹋我ofcourse的“NULL”,但为什么我不断收到它,如果我关上了动车组,并启动应用程序它再次从菜单(不在Visual Studio中再次启动它)。

我不应该第二次得到“NOT NULL”吗?

+1

“设置”究竟是什么?我可以尝试猜测,但我宁愿不必... – 2012-03-16 19:52:40

+0

设置是var settings = IsolatedStorageSettings.ApplicationSettings; ive更新了代码 – Jason94 2012-03-16 20:07:05

回答

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的模式绝对有效。

如果CurrentPlaceNowModel无法用DataContractSerializer进行序列化,这将不起作用的唯一原因是。这是ApplicationSettings在内部用于序列化对象的内容。
你可以通过这种方式连续测试它,看看会发生什么。

+0

我需要使用CurrentPlaceNowModel做些什么来使其可序列化吗?也许这就是最新的错误。其唯一定义为公共类CurrentPlaceNowModel:INotifyPropertyChanged – Jason94 2012-03-16 21:48:41

+0

根据它的作用,包含和支持它可能不可序列化。你能显示代码吗? – 2012-03-16 22:36:23

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); 
} 
+0

At,输入错误。改变它...仍然显示NULL:[ – Jason94 2012-03-16 20:20:59

+1

@ Jason94:你有没有在任何时候调用'Save()'? (如果没有,它应该可以在同一个运行中,但它不会持续......) – 2012-03-16 20:23:18

+0

看到我的更新:[仍然显示NULL,这只是奇怪? – Jason94 2012-03-16 20:32:54