Как сохранить настройки моего приложения?

У меня проблема с сохранением настроек приложения? Я создаю универсальное приложение для Windows 10, и у меня есть слайдер, значение которого я хочу сохранить.

я использую этот код, чтобы сохранить его:

private void musicVolume_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
    {
        ApplicationDataContainer AppSettings = ApplicationData.Current.LocalSettings;
        AppSettings.Values["musicV"] = musicVolume.Value;
    }

И в конструкторе страницы у меня есть следующие строки кода:

ApplicationDataContainer AppSettings = ApplicationData.Current.LocalSettings;

        if (AppSettings.Values.ContainsKey("musicV"))
        {
            musicVolume.Value = Convert.ToDouble(AppSettings.Values["musicV"]);
        }

Он должен был показывать новое значение, когда я перехожу на эту страницу, но это не так, оно всегда показывает последнее значение по умолчанию. Почему не работает и как заставить работать?

PS: извините за мой плохой английский ...


person ja13    schedule 02.12.2015    source источник
comment
Попробуйте записать эти значения в Settings.setting, потому что app.config сбрасывается до значения по умолчанию, где бы вы ни создавали код.   -  person Irshad    schedule 02.12.2015
comment
stackoverflow.com/questions/3032492 /   -  person Irshad    schedule 02.12.2015
comment
См. эту страницу, чтобы узнать, как управлять настройками приложения в универсальное приложение для Windows 10   -  person stuartd    schedule 02.12.2015


Ответы (3)


Вместо конструктора выполните инициализацию musicVolume.Value после загрузки страницы, подписавшись на событие страницы Loaded в конструкторе. Событие Loaded - подходящее место для такой инициализации.

Например, в конструкторе добавьте:

Loaded += Page_Loaded;

И ваш обработчик событий Loaded как:

private void Page_Loaded(object sender, RoutedEventArgs e)
{
    ApplicationDataContainer AppSettings = ApplicationData.Current.LocalSettings;

    if (AppSettings.Values.ContainsKey("musicV"))
    {
        musicVolume.Value = (double)AppSettings.Values["musicV"];
    }
}
person user5525674    schedule 03.12.2015
comment
Спасибо за совет, но каковы на самом деле преимущества этого способа? - person ja13; 03.12.2015
comment
В обработчике событий Loaded вы знаете, что элемент управления (в вашем случае с именем musicVolume) правильно инициализирован. Дополнительная информация здесь. - person user5525674; 03.12.2015

Вы можете попытаться инкапсулировать свои настройки в класс «SettingsManager», как описано в этом сообщении: https://stackoverflow.com/a/33754414/1694281

Таким образом, вы будете уверены, что сразу получите доступ к последнему назначенному значению без каких-либо проблем с синхронизацией. (И вы также можете сделать с ним привязку.)

person nhuau    schedule 02.12.2015

В конце концов я переопределил метод OnNavigatedFrom:

 protected override void OnNavigatedFrom(NavigationEventArgs e)
 {
    ApplicationDataContainer AppSettings = ApplicationData.Current.LocalSettings;
    AppSettings.Values["musicV"] = musicVolume.Value;
 }

Теперь он сохраняет настройки, когда вы покидаете страницу, и все работает. Я до сих пор не понимаю, почему метод из моего ответа не сработал. Очевидно, есть проблема с событием ValueChanged.

@nhuau: ваше решение выглядит неплохо, но я новичок и не понял, как применить его к моей проблеме. Но я буду иметь это в виду и когда-нибудь в будущем вернусь к этому.

person ja13    schedule 02.12.2015