Чтение параметра в IsolatedStorage с другой страницы

#c# #xml #xaml #windows-phone-7

#c# #xml #xaml #windows-phone-7

Вопрос:

Простой вопрос, задававшийся ранее, но никто не дал мне правильного ответа, поэтому я буду предельно конкретен.

Мне нужно прочитать две формы настроек IsolatedStorage в Windows Phone. Параметрами являются ExitAlert и OrientationLock . Я уже настроил настройки, они сохраняются просто отлично, мне просто нужно знать, как прочитать их с другой страницы. Страница, на которой установлены переменные, является Settings.cs , и мне нужно прочитать настройки с MainPage.xaml.cs . Мне также нужно знать, как что-то делать, только если переменная имеет значение true или false. Я думаю, что я должен использовать оператор if-then-else, но я просто хочу перепроверить.

Мое приложение написано на C #. Это код, который я использую для хранения настроек:

 using System;
using System.IO.IsolatedStorage;
using System.Diagnostics;

namespace Google_
{
    public class AppSettings
    {

        IsolatedStorageSettings isolatedStore;

        // isolated storage key names
        const string ExitWarningKeyName = "ExitWarning";
        const string OrientationLockKeyName = "OrientationLock";

        // default values
        const bool ExitWarningDefault = true;
        const bool OrientationLockDefault = false;

        public AppSettings()
        {
            try
            {
                // Get the settings for this application.
                isolatedStore = IsolatedStorageSettings.ApplicationSettings;

            }
            catch (Exception e)
            {
                Debug.WriteLine("Exception while using IsolatedStorageSettings: "   e.ToString());
            }
        }


        public bool AddOrUpdateValue(string Key, Object value)
        {
            bool valueChanged = false;

            // If the key exists
            if (isolatedStore.Contains(Key))
            {
                // If the value has changed
                if (isolatedStore[Key] != value)
                {
                    // Store the new value
                    isolatedStore[Key] = value;
                    valueChanged = true;
                }
            }
            // Otherwise create the key.
            else
            {
                isolatedStore.Add(Key, value);
                valueChanged = true;
            }

            return valueChanged;
        }

        public valueType GetValueOrDefault<valueType>(string Key, valueType defaultValue)
        {
            valueType value;

            // If the key exists, retrieve the value.
            if (isolatedStore.Contains(Key))
            {
                value = (valueType)isolatedStore[Key];
            }
            // Otherwise, use the default value.
            else
            {
                value = defaultValue;
            }

            return value;
        }

        public void Save()
        {
            isolatedStore.Save();
        }

        public bool ExitWarning
        {
            get
            {
                return GetValueOrDefault<bool>(ExitWarningKeyName, ExitWarningDefault);
            }
            set
            {
                AddOrUpdateValue(ExitWarningKeyName, value);
                Save();
            }
        }

        public bool OrientationLock
        {
            get
            {
                return GetValueOrDefault<bool>(ExitWarningKeyName, OrientationLockDefault);
            }
            set
            {
                AddOrUpdateValue(OrientationLockKeyName, value);
                Save();
            }
        }

    }
}
  

Если что-то неясно, просто дайте мне знать, чтобы я мог объяснить дальше. Спасибо.

Ответ №1:

Что я делаю, так это добавляю следующее в свой класс AppSettings:

 private static AppSettings _default = new AppSettings();
/// <summary>
/// Gets the default instance of the settings
/// </summary>
public static AppSettings Default
{
    get
    {
        return _defau< 
    }
}
  

Тогда вы можете просто использовать AppSettings.По умолчанию из любого места вашего проекта:

 if (AppSettings.Default.ExitWarning)
{
}
else
{
}
  

Дайте мне знать, если вам понадобится дополнительная информация.

Комментарии:

1. Я не совсем понимаю, как это работает. Могу ли я просто использовать что-то вроде if (AppSettings.ExitAlert == true) для получения определенного логического значения …?

2. Значит, это должно работать с любой страницы? РЕДАКТИРОВАТЬ: Ах! Это работает отлично! Большое спасибо!

Ответ №2:

Вы также можете использовать PhoneApplicationService.Current.State[] для хранения настроек всего приложения. К ним можно получить доступ с любой страницы, и вам не нужно изолированное хранилище для их хранения.

Пример:

 PhoneApplicationService.Current.State["ExitWarning"] = true;