Хранение пар ключ / значение на диске с использованием WPF - PullRequest
7 голосов
/ 19 мая 2011

У меня есть несколько пар ключ / значение, которые я хотел бы кэшировать для своего приложения WPF.В Silverlight это очень просто - я могу просто сделать:

IsolatedStorageSettings userSettings = IsolatedStorageSettings.ApplicationSettings;
wombat = (string)userSettings["marsupial"];

Есть ли что-нибудь подобное в WPF?Вомбат не может быть сумчатым, теперь я думаю об этом.Там нужно было поработать.

Редактировать: Хотелось бы, если бы я мог избежать их сериализации в массовом порядке, так как их будет очень много с большими объемами данных (яКеширую веб-страницы).

Ответы [ 3 ]

13 голосов
/ 19 мая 2011

IsolatedStorageSettings не существует в настольной версии .NET Framework, оно доступно только в Silverlight. Однако вы можете использовать IsolatedStorage в любом приложении .NET; просто сериализовать Dictionary<string, object> в файл в изолированном хранилище.

var settings = new Dictionary<string, object>();
settings.Add("marsupial", wombat);

BinaryFormatter formatter = new BinaryFormatter();
var store = IsolatedStorageFile.GetUserStoreForAssembly();

// Save
using (var stream = store.OpenFile("settings.cfg", FileMode.OpenOrCreate, FileAccess.Write))
{
    formatter.Serialize(stream, settings);
}

// Load
using (var stream = store.OpenFile("settings.cfg", FileMode.OpenOrCreate, FileAccess.Read))
{
    settings = (Dictionary<string, object>)formatter.Deserialize(stream);
}

wombat = (string)settings["marsupial"];
6 голосов
/ 19 мая 2011

Если под WPF вы подразумеваете полное время выполнения .Net, тогда да.Существует класс настроек по умолчанию, созданный с помощью шаблона проекта WPF. Класс настроек

2 голосов
/ 18 июня 2012

См. Это обсуждение

Он не существует в WPF, но может быть легко перенесен из реализации Mono в лунном свете (http://vega.frugalware.org/tmpgit/moon/class/System.Windows/System.IO.IsolatedStorage/IsolatedStorageSettings.cs)

    //Modifications at MoonLight's IsolatedStorageSettings.cs to make it work with WPF (whether deployed via ClickOnce or not):

// per application, per-computer, per-user
public static IsolatedStorageSettings ApplicationSettings {
  get {
    if (application_settings == null) {
      application_settings = new IsolatedStorageSettings (
        (System.Threading.Thread.GetDomain().ActivationContext!=null)?
          IsolatedStorageFile.GetUserStoreForApplication() : //for WPF, apps deployed via ClickOnce will have a non-null ActivationContext
          IsolatedStorageFile.GetUserStoreForAssembly());
    }
    return application_settings;
  }
}

// per domain, per-computer, per-user
public static IsolatedStorageSettings SiteSettings {
  get {
    if (site_settings == null) {
      site_settings = new IsolatedStorageSettings (
        (System.Threading.Thread.GetDomain().ActivationContext!=null)?
          IsolatedStorageFile.GetUserStoreForApplication() : //for WPF, apps deployed via ClickOnce will have a non-null ActivationContext
          IsolatedStorageFile.GetUserStoreForAssembly());
          //IsolatedStorageFile.GetUserStoreForSite() works only for Silverlight applications
    }
    return site_settings;
  }
}

Обратите внимание, что вы также должны изменитьблок #if в верхней части этого кода для записи

if! SILVERLIGHT

Также обратите внимание на это хранилище пользовательских настроек

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...