IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Windows 10 UWP开发:如何读取和保存设置

    汪宇杰发表于 2015-11-20 02:32:57
    love 0

    在UWP里,保存和读取设置的方法和WinRT完全一致。用到的类是ApplicationData.Current.LocalSettings。它里面是用键值对保存设置的。

    保存设置的方法是:

    LocalSettings.Values[key] = value;

    读取设置的方法是:

    if (LocalSettings.Values.ContainsKey(key))
    {
        return LocalSettings.Values[key];
    }

    注意得先判断key存不存在。

    考虑到使用方便,我们可以封装一个管理应用程序设置的类型AppSettings:

    public class AppSettings : INotifyPropertyChanged
    {
        public bool ShowTimeSheetSetting
        {
            get
            {
                return ReadSettings(nameof(ShowTimeSheetSetting), true);
            }
            set
            {
                SaveSettings(nameof(ShowTimeSheetSetting), value);
                NotifyPropertyChanged();
            }
        }
    
        public ApplicationDataContainer LocalSettings { get; set; }
    
        public AppSettings()
        {
            LocalSettings = ApplicationData.Current.LocalSettings;
        }
    
        private void SaveSettings(string key, object value)
        {
            LocalSettings.Values[key] = value;
        }
    
        private T ReadSettings<T>(string key, T defaultValue)
        {
            if (LocalSettings.Values.ContainsKey(key))
            {
                return (T)LocalSettings.Values[key];
            }
            if (null != defaultValue)
            {
                return defaultValue;
            }
            return default(T);
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        protected void NotifyPropertyChanged([CallerMemberName]string propName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
        }
    }

    主要几点:

    1. 用C#6简化语法,key是string类型的,我们用nameof自动读取设置的属性名字。调用事件的时候,用?.判断事件是否为null。非常的有逼格。

    2. 用到了泛型,做类型转换,如果有默认值,就返回默认值,因为通常我们的应用是需要设置的默认值的。这里我为了演示简单,只加了一个bool类型的ShowTimeSheetSetting属性。

    3. 对外操作就是对属性的GET和SET,自动保存和读取设置,无需关心细节,也就是说ApplicationData.Current.LocalSetting 对外是透明的,意味着哪天具体的实现更改了,应用程序的其他地方可以不用动。这是一个设计上常用的原则。

    4. 因为实现了INotifyPropertyChanged接口,在XAML上就可以做双向绑定了。于是就可以这样用:

    <Page.Resources>
        <core:AppSettings x:Key="AppSettings" />
    </Page.Resources>
    
    <ToggleSwitch OnContent="显示首末班车时间" OffContent="隐藏首末班车时间" IsOn="{Binding Source={StaticResource AppSettings}, Path=ShowTimeSheetSetting, Mode=TwoWay}" />

    其他类型的设置,比如string,int,都可以直接写成AppSettings类的属性,然后在xaml上用类��的方法绑定。



沪ICP备19023445号-2号
友情链接