首页 > 其他分享 >WPF-配置文件保存和读取

WPF-配置文件保存和读取

时间:2023-06-23 17:11:26浏览次数:41  
标签:set return string 配置文件 get private WPF public 读取

方法一:属性-设置

1,在项目工程名称上》右键属性》设置

 2,设置和保存(保存按钮对应的代码)

        private void Btn_save_Click(object sender, RoutedEventArgs e)
        {
            int quantity = 0;
            int.TryParse(txt_ToolQuantity.Text.Trim(), out quantity);
            if (quantity > 9)
            {
                System.Windows.MessageBox.Show("工具数量最大为9", "提示");
            }
            else if (quantity<=0)
            {
                System.Windows.MessageBox.Show("工具数量不能为0", "提示");
            }
            else
            {
                if (chk_EnableAtlasStation.IsChecked == true)
                {
                    Properties.Settings.Default.IsEnableAtlasStation = true;
                }
                else
                {
                    Properties.Settings.Default.IsEnableAtlasStation = false;
                }
                //if(chk_EnableAutoUpdateOldTightingData.IsChecked == true)
                //{
                //    Properties.Settings.Default.EnableAutoUpdateOldTightingData = true;
                //}
                //else
                //{
                //    Properties.Settings.Default.EnableAutoUpdateOldTightingData = false ;
                //}

                Properties.Settings.Default.AtlasStationQuantity = quantity;
                Properties.Settings.Default.Save();
                Toast.Show("保存成功,重启生效", new ToastOptions { Icon = ToastIcons.Information, Location = ToastLocation.OwnerCenter, Time = 1000, Width = 200, Height = 50 });
            }
        }

3,读取参数

            int ATtoolQuantitis = Properties.Settings.Default.AtlasStationQuantity;

            bool isenable = Properties.Settings.Default.IsEnableAtlasStation;

            bool isAutoUploadOldData= Properties.Settings.Default.EnableAutoUpdateOldTightingData;


            txt_ToolQuantity.Text = ATtoolQuantitis.ToString();

            chk_EnableAtlasStation.IsChecked = isenable ? true : false;

  

方法二:使用AutoMapper

参考:WPF 分享一种设置程序保存配置文件的方法 | 配置 (lmlphp.com)

1,XMAL页面

                    <CheckBox Margin="5,2" IsChecked ="{Binding IsUploadData}" Content="数据上传" />
                    <ComboBox SelectedValue="{Binding APIType}" ItemsSource="{Binding APITypeList}" Width="200" Margin="5,0"/>
                    <TextBox Text="{Binding APIUrl}"   Width="200" Margin="5,0"/> 

2,新建2个Model:SettingModel和SettingModelBack

    public class SettingModel : ObservableObject

    {
        private bool _IsUploadData;

        public bool IsUploadData

        {
            get { return _IsUploadData; }

            set { _IsUploadData = value; RaisePropertyChanged("IsUploadData"); }
        }

        private string _APIType;

        public string APIType

        {
            get { return _APIType; }

            set { _APIType = value; RaisePropertyChanged("APIType"); }
        }

        private List<string> _APITypeList;

        public List<string> APITypeList

        {
            get { return _APITypeList; }

            set { _APITypeList = value; RaisePropertyChanged("APITypeList"); }
        }

        private string _APIUrl;

        public string APIUrl

        {
            get { return _APIUrl; }

            set { _APIUrl = value; RaisePropertyChanged("APIUrl"); }
        }

        private string _DBType;

        public string DBType

        {
            get { return _DBType; }

            set { _DBType = value; RaisePropertyChanged("DBType"); }
        }
    }

  因为使用了MVVM,Model都实现了INotifyPropertyChanged接口,不可以序列化。是我们需要再添加一个Model,结构和SettingModel一样,但是不实现INotifyPropertyChanged接口。此Model类上添加 [Serializable]标记

这样我们在保存时,需要将SettingModel的数据赋给SettingModelBack,我们可以用AutoMapper来实现,很方便。

    [Serializable]
    public class SettingModelBack

    {
        private bool _IsUploadData;

        public bool IsUploadData

        {
            get { return _IsUploadData; }

            set { _IsUploadData = value; }
        }

        private string _APIType;

        public string APIType

        {
            get { return _APIType; }

            set { _APIType = value; }
        }

        private List<string> _APITypeList;

        public List<string> APITypeList

        {
            get { return _APITypeList; }

            set { _APITypeList = value; }
        }

        private string _APIUrl;

        public string APIUrl

        {
            get { return _APIUrl; }

            set { _APIUrl = value; }
        }

        private string _DBType;

        public string DBType

        {
            get { return _DBType; }

            set { _DBType = value; }
        }
    }

 

3,引入AutoMapper.dll  版本:8.0.0.0,在程序的入口或主窗体的构造函数中添加

            //设置或注册,在使用 Map 方法之前,首先要告诉 AutoMapper 什么类可以映射到什么类,
            //这个方法只能执行一次,再次执行会报错,所以要放在主程序的入口
            Mapper.Initialize(m => m.CreateMap<SettingModel, SettingModelBack>());

4,保存按钮

            //保存时,需要将SettingModel的数据赋给SettingModelBack
            var config = AutoMapper.Mapper.Map<SettingModelBack>(this.DataContext);
            //序列化SettingModelBack保存在文件
            SerializeHelper.MySerialize<SettingModelBack>(config);

5,读取参数配置

        public SystemConfiguration()
        {
            InitializeComponent();
         
            DataContext = new SettingModel();

            //读取配置文件(反序列化为SettingModelBack对象)
            var configData = SerializeHelper.MyBackSerialize<SettingModelBack>();          
            configData.APITypeList = new List<string> { "WebApi", "WebService" };//Combobox添加默认选项
            //将SettingModelBack映射到SettingModel,赋值给DataContext,页面打开后就显示配置文件中的储存值啦。
            DataContext = AutoMapper.Mapper.Map<SettingModel>(configData);         
        }

 

总结:这种保存配置文件的方式,有个好处就是如果有新的配置项需要保存,我们只需要在Model中添加相应的属性,并绑定到界面上(WPF本来也需要做这个事)

 

 

 

 

标签:set,return,string,配置文件,get,private,WPF,public,读取
From: https://www.cnblogs.com/baozi789654/p/17494167.html

相关文章

  • Java读取excel中日期格式结果为数字xxx天
    解释:Java读取excel中日期结果是计算1900-0-1之后到当前日期,一共有多少天,需要做一下转换处理/***用于计算1900-0-1之后的day天日期是哪天*举例:1900-0-1之后的44326天日期是2021/5/10*@return*/publicstaticStringdayToDate(intday){......
  • Unreal中ini配置文件的hierarchy
    ConfigUE的很多配置是通过ini文件实现的,相对于二进制文件来说,ini文件的优点是读取、阅读、修改都非常方便,因为所有的文本编辑器都可以修改。但是UE中的ini文件可谓是眼花缭乱,在Engine、project文件夹下,同样的Engine.ini可能存在baseengine.ini、defaultengine.ini、engine.ini,pla......
  • WPF 自定义ListBox
    需求:ListBox只在选中时有相应的高亮颜色,光标悬浮或滑动时不显示高亮;以满足在触屏上时不会误导人操作…… 以下为实现代码:namespaceFrameControlLibrary{///<summary>///按照步骤1a或1b操作,然后执行步骤2以在XAML文件中使用此自定义控件。///......
  • WPF编译时“所使用的 PresentationFramework 6.0.2 高于所引用的标识为 6.0.0 程序集
    一个用.NET6开发的WPF应用,前面编译执行都正常。同事要出差,把代码拷贝到开发本上编译时,编译报错。编译报错的内容主要如标题所示:所使用的PresentationFramework6.0.2高于所引用的标识为PresentationFramework6.0.0程序集PresentationFramework上网搜索了一下,搜到了林......
  • Python 修改ha配置文件
    Python修改ha配置文件任务要求1、用户输入字符串{"backend":"test.oldboy.org","record":{"server":"100.1.7.9","weight":20,"maxconn":30}}2、在对应的backend下,添加一条新记录backend不存在时,创建3、删除一条记录ba......
  • WPF 自定义ComboBox
    需求:ComboBox下拉列表,在光标移出ComboBox后,下拉列表立即收起。 利用WPF的 自定义控件继承于ComboBox开发项目中需要的JComboBox,其代码如下:namespaceFrameWPF{///<summary>///按照步骤1a或1b操作,然后执行步骤2以在XAML文件中使用此自定义控件。......
  • 关于在Redhat-7-linux-系统-Apache-2.4.6-版本上部署多个版本的yum仓库-的配置文件写
    背景:云上有一台内部yum服务器,操作系统及版本信息为:RedHatEnterpriseLinuxServerrelease7.9(Maipo)上面每天会同aws仓库官网同步repo,版本也自然是 RedHatEnterpriseLinuxServerrelease7现在需要临时增加Redhat8.的仓库,(默认Redhat8也是有内部repo仓库的,只是在......
  • 多路Qt串口通信源码C++语言接口自定义协议帧Qt读写配置文件ini出售: 可变长定长通信接
    多路Qt串口通信源码C++语言接口自定义协议帧Qt读写配置文件ini出售:可变长定长通信接口协议实现Qt多路串口发送接收SerialProtocol.rar工控自定义报文可用于嵌入式,单片机,ARM,DSP等常见的串口通信中,出售在应用实践中编写总结的源代码,实现自定义的串口通信协议,包括报文头部、长度......
  • labview操作access和sql server数据库很实用的例子,含有创建表格,读写数据,按时间段读取,
    labview操作access和sqlserver数据库很实用的例子,含有创建表格,读写数据,按时间段读取,读取表格名称,还有部分sql指令操作等提供数据库软件,提供远程安装等ID:96128597927697257......
  • 宝塔-ftp配置文件内容
    ###############################################################Configurationfileforpure-ftpdwrappers##################......