• Microsoft .NET
  • WPF и Silverlight
  • Элементы управления пользовательского интерфейса Silverlight (User Interface Controls)

Сводные данные и изолированное хранилище в Silverlight - Базовое изолированное хранилище

ОГЛАВЛЕНИЕ

Базовое изолированное хранилище

Этот образец приложения позволяет пользователю добавить несколько веб-каналов и просмотреть все элементы для каждого из них. Если пользователь укажет десять веб-каналов и решит, что ему необходимо закрыть приложение и прочесть их позже, то он, скорее всего, ожидает, что оно запомнит эти веб-каналы. В противном случае ему придется указывать Uri для каждого веб-канала всякий раз, когда он открывает приложение. Поскольку эти веб-каналы могут быть разными для каждого пользователя, их можно хранить или на сервере, используя какой-нибудь маркер для идентификации пользователя, который их ввел, или на компьютере пользователя.
Silverlight обеспечивает хранение данных в защищенной области компьютера пользователя с помощью классов пространства имен System.IO.IsolatedStorage. Silverlight Isolated Storage – словно куки-файлы на стероидах: оно позволяет хранить простые скалярные значения или даже сериализованные сложные графы объектов на клиентском компьютере. Самый простой способ выполнить сохранение в изолированном хранилище – это создать запись ApplicationSettings и сохранить данные в ней, как показано ниже:

private void SaveFeedsToStorage_UsingSettings()
{
  string data = GetFeedsFromStorage_UsingSettings() + FEED_DELIMITER + 
  txtAddress.Text;
  if (IsolatedStorageSettings.ApplicationSettings.Contains(FEED_DATA))
  IsolatedStorageSettings.ApplicationSettings[FEED_DATA] = data;
  else
  IsolatedStorageSettings.ApplicationSettings.Add(FEED_DATA, data);

Ее можно вызывать при каждом добавлении или удалении SyndicationFeed из ObservableCollection<SyndicationFeed> поля экземпляра, которое называется _feeds. Поскольку ObservableCollection предоставляет событие CollectionChanged, то событию, выполняющему сохранение, можно назначить обработчик, как показано ниже:

_feeds.CollectionChanged += ((sender, e) => { 
  SaveFeedsToStorage_UsingSettings(); }); 

При выполнении метод SaveFeedsToStorage_UsingSettings в первую очередь вызывает метод GetFeedsFromStorage_UsingSettings, который собирает адреса всех полей из изолированного хранилища и помещает их в одну строку, ограниченную специальным символом.

При первом запуске приложения метод LoadFeedsFromStorage_UsingSettings получает веб-каналы из изолированного хранилища:

private void LoadFeedsFromStorage_UsingSettings()
{
  string data = LoadFeedsFromStorage_UsingSettings();
  string[] feedList = data.Split(new string[1] { FEED_DELIMITER }, 
  StringSplitOptions.RemoveEmptyEntries);
  foreach (var address in feedList)
  LoadFeed(new Uri(address));

Код сначала выполняет чтение списка адресов Uri для каждого веб-канала из изолированного хранилища. Затем он выполняет итерацию адресов и загружает по одному каждый отдельный веб-канал с помощью метода LoadFeed method.