我在保存应用设置时遇到问题?我创建了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:抱歉我的英语不好......
答案 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:你的解决方案看起来不错,但我是初学者,并且没有弄明白如何将它应用到我的问题上。但我会记住这一点,将来某个时候再回过头来。