Я создаю игру для Windows Phone, используя Silverlight для графического интерфейса.
У меня в игре две страницы - MainPage и GamePage. MainPage содержит CheckBox'ы для настроек игры, привязанных к классу, который управляет настройками приложения (звук? Вкл .: выкл. И т. Д ...)
<local:AppSettings x:Key="appSettings"></local:AppSettings>
...
<CheckBox x:Name="Sound" Content="CheckBox" Height="80" Margin="258,0,262,134" Style=" {StaticResource CheckBoxStyle2}" VerticalAlignment="Bottom"
IsChecked="{Binding Source={StaticResource appSettings}, Path=SoundEffectsSetting, Mode=TwoWay}" />
В модели я использую IsolatedStorageSettings.ApplicationSettings для сохранения настроек.
/// <summary>
/// Property to get and set a Sound Effects Setting key.
/// </summary>
public bool SoundEffectsSetting
{
get
{
return GetValueOrDefault<bool>(SoundEffectsSettingKeyName, SoundEffectsSettingDefault);
}
set
{
AddOrUpdateValue(SoundEffectsSettingKeyName, value);
Save();
NotifyPropertyChanged("Sound");
}
}
Изменение настроек в MainPage работает нормально. Я также могу включить или выключить звук в GamePage. Однако, поскольку ViewModel создает свою собственную «копию» (не уверенную в правильности термина) AppSettings в памяти, когда я переключаю настройку звука «OFF» в GamePage, она не отражается в MainPage, когда я возвращаюсь назад. IsolatedStorageSettings инициализируется в конструкторе AppSettings.
// Our isolated storage settings
IsolatedStorageSettings isolatedStore;
/// <summary>
/// Constructor that gets the application settings.
/// </summary>
public AppSettings()
{
try
{
// Get the settings for this application.
isolatedStore = IsolatedStorageSettings.ApplicationSettings;
}
catch (Exception e)
{
Debug.WriteLine("Exception while using IsolatedStorageSettings: " + e.ToString());
}
}
Я думал, что смогу просто обновить BindingExpression
Trajectory.GetBindingExpression(CheckBox.IsCheckedProperty).UpdateSource();
Тем не менее, я понял, ДУХ! это обновление модели, чтобы отразить то, что в представлении. Это означает, что значение SoundEffectsSetting (в модели) изменяется на текущее состояние флажка Sound (в ViewModel).
Итак, что я сделал, это:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (!_Loaded)
{
AppSettings appSettings = new AppSettings();
if (appSettings.SoundEffectsSetting)
{
Sound.IsChecked = true;
}
else
{
Sound.IsChecked = false;
}
if (appSettings.TrajectorySetting)
{
Trajectory.IsChecked = true;
}
else
{
Trajectory.IsChecked = false;
}
}
base.OnNavigatedTo(e);
}
_Loaded переключается в методе OnNavigatedFrom.
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
_Loaded = false;
base.OnNavigatingFrom(e);
}
Теперь к моему вопросу. Можно ли использовать привязку данных для обновления флажка «Звук» (на главной странице) при изменении настроек звука в GamePage? Или мое решение - лучший способ сделать это?