#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;