2012-03-16 162 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