2012-03-16 3 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"); 

Когда я начинаю эму я конечно «нулевой», но почему я получаю, если я закрыть приложение на эму и начала он снова из меню (НЕ запускать его снова в Visual Studio).

Должен ли я не получить «NOT NULL» 2-й раз?

+1

А что такое 'settings'? Я мог бы попытаться угадать, но я бы не захотел ... –

+0

Настройки: var settings = IsolatedStorageSettings.ApplicationSettings; ive обновил код – Jason94

ответ

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

+0

В зависимости от того, что он делает, содержит и поддерживает его, возможно, не может быть серализуемым. Можете ли вы показать код? –

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, typo error. Изменено ... Показывает NULL: [ – Jason94

+1

@ Jason94: И вы в любой момент называли 'Save()' на нем? (Это должно быть в порядке, если нет, но это не будет сохраняться ...) –

+0

См. Мое обновление: [все еще показывает NULL, это просто странно? – Jason94

Смежные вопросы