如何保存我的应用程序设置?

4
我有一个保存应用程序设置的问题。我正在创建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:对我的糟糕英语感到抱歉...

1
尝试将这些值写入 Settings.setting,因为无论您在何处构建代码,app.config 都会重置为默认设置。 - Irshad
1
https://dev59.com/TXA75IYBdhLWcg3w7tt6 - Irshad
请参阅此页面,了解如何在 Windows 10 通用应用程序中管理应用程序设置。 - stuartd
3个回答

6
不要在构造函数中初始化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"];
    }
}

谢谢您的建议,但是这种方法实际上有哪些好处呢? - ja13
2
在Loaded事件处理程序中,您知道控件元素(在您的情况下名称为musicVolume)已正确初始化。更多信息请参见此处 - user5525674

1
你可以尝试将设置封装到一个名为“SettingsManager”的类中,就像这篇帖子中所描述的那样:https://dev59.com/CZHea4cB1Zd3GeqPlikg#33754414 这样,您就可以确保立即访问到最后分配的值,而无需进行任何同步问题。(并且您还可以使用绑定)。

1
最终我重写了 OnNavigatedFrom 方法:
 protected override void OnNavigatedFrom(NavigationEventArgs e)
 {
    ApplicationDataContainer AppSettings = ApplicationData.Current.LocalSettings;
    AppSettings.Values["musicV"] = musicVolume.Value;
 }

现在,当您离开页面时,它会保存设置并且正常工作。我仍然不知道为什么我的答案中的方法不起作用。显然,ValueChanged事件存在一些问题。
@nhuau:您的解决方案看起来不错,但我是初学者,不知道如何将其应用于我的问题。但我会记住它,并在将来的某个时候回来看看。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接