如何保存我的应用设置?

时间:2015-12-02 12:30:48

标签: c# windows uwp

我在保存应用设置时遇到问题?我创建了Windows 10通用应用程序,我有Slider,我希望保存它。

我使用此代码保存它:

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:抱歉我的英语不好......

3 个答案:

答案 0 :(得分:6)

而不是在构造函数中,通过在构造函数中订阅Page Loaded 事件来加载Page后执行musicVolume.Value初始化。 已加载事件是进行此类初始化的合适位置。

例如,在构造函数中添加:

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"];
    }
}

答案 1 :(得分:1)

您可以尝试将设置封装到“SettingsManager”类中,如本文所述:https://stackoverflow.com/a/33754414/1694281

就像那样,您可以确保立即访问最后指定的值而不会出现任何同步问题。 (你也可以用它绑定它。)

答案 2 :(得分:1)

最终我重写了OnNavigatedFrom方法:

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

现在它在您离开页面时保存设置并且它可以正常工作。我现在还不知道为什么我的答案中的方法不起作用。显然,ValueChanged事件存在一些问题。

@nhuau:你的解决方案看起来不错,但我是初学者,并且没有弄明白如何将它应用到我的问题上。但我会记住这一点,将来某个时候再回过头来。