WPF状态保存
由于WPF做客户端的时候,它不像BS那样有Session,Cookie给你使用,所以保存状态你首先想到的就是数据库了。
但是你不可能什么都放在数据库,为此还专门为它建立一张表。
而WPF中能用到的除了数字存储仓,Redis,MemoryCache之外,最简单最直接的办法就是保存到本地。

像这种,记得qq登录界面也是差不多类似情况。
如果像qq那样。只有一个记住密码,我们完全可以使用静态来做,简单高效,而项目如果大了,就需要我们面向接口编程。
这里我顺便教大家,怎么创建接口,并实现功能。
1、我们上一次关闭程序的时候打勾还是没有打勾,我们要让程序记住,并且让他们读取出来。
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
//程序启动加载上一次关闭时SetData的数据状态
StateHelper.ApplySavedState();
}
public static void ApplySavedState()
{
if (File.Exists("settings.json"))
{
string serializedSettings = File.ReadAllText("settings.json");
var settingsList = JsonConvert.DeserializeObject<List<MusicSettings>>(serializedSettings);
foreach (var settings in settingsList)
{
if (settings.Type == SettingType.StartupInfo)
{
var startupInfo = SetDetailData.Instance.CommonSetInfos.FirstOrDefault(s => s.Id == settings.Id);
if (startupInfo != null)
{
startupInfo.IsSelected = settings.IsSelected;
}
}
else if (settings.Type == SettingType.DownLoadInfo)
{
var downLoadInfo = SetDetailData.Instance.DownLoadInfos.FirstOrDefault(d => d.Id == settings.Id);
if (downLoadInfo != null)
{
downLoadInfo.IsSelected = settings.IsSelected;
}
}
else if (settings.Type == SettingType.LyricsSetInfo)
{
var lyricsSetInfo = SetDetailData.Instance.LyricsSetRowInfos.FirstOrDefault(d => d.Id == settings.Id);
if (lyricsSetInfo != null)
{
lyricsSetInfo.IsSelected = settings.IsSelected;
}
}
}
}
}
2、程序关闭的时候,要保存我们的状态,然后关闭,
在这张图片中,我们可以直接在点击的同时进行保存操作。
把这个点击当作命令来写就行
private DelegateCommand _saveState;
public DelegateCommand SaveState =>
_saveState ?? (_saveState = new DelegateCommand(ExecuteSave));
private void ExecuteSave()
{
_settingsService.SaveDataStateInfos(SetDetailData.Instance.CommonSetInfos);
//StateHelper.SaveState(SetDetailData.Instance.StartupInfos);
}
现在,建立接口。
我们首先要明白,这个接口是做什么的,能做什么?
我们实现的功能时WPF的状态保存,我们一定要有保存功能,
/// <summary>
/// 保存加载用户保存CheckBox和RadioButton的信息
/// </summary>
public interface ISettingsService
{
/// <summary>
/// 保存页面的数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="stateInfos"></param>
void SaveDataStateInfos<T>(ObservableCollection<T> stateInfos);
}
然后就是实现这个接口并完善功能
public class SettingsService : ISettingsService
{
public void SaveDataStateInfos<T>(ObservableCollection<T> stateInfos)
{
foreach (var stateInfo in stateInfos)
{
if (_typeMap.TryGetValue(stateInfo.GetType(), out SettingType settingType))
{
var settings = _settingsList.FirstOrDefault(s => s.Id == GetId(stateInfo) && s.Type == settingType);
if (settings != null)
{
settings.IsSelected = GetIsSelected(stateInfo);
}
else
{
settings = new MusicSettings() { Id = GetId(stateInfo), IsSelected = GetIsSelected(stateInfo), Type = settingType };
_settingsList.Add(settings);
}
}
}
string serializedSettings = JsonConvert.SerializeObject(_settingsList);
File.WriteAllText(StateFileName, serializedSettings);
}
}
WPF状态保存的更多相关文章
- Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其中View的状态处理. Activity的状态除了其中的View和Fragment的状 ...
- Activity生命周期与状态保存
弹出系统对话框,程序仍部分可见 onPause 对话框消失时 onResume 调用一个新的Activity,老的Activity不可见时 onPause->onStop 从新的Activi ...
- 【Android 应用开发】Activity 状态保存 OnSaveInstanceState參数解析
作者 : 韩曙亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38297083 一. 相关方法简单介绍 1. 状态保存方法演示 ...
- Activity生命周期,状态保存恢复(经典)
一.整体框架 二.main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...
- Android菜鸟的成长笔记(14)—— Android中的状态保存探究(上)
原文:[置顶] Android菜鸟的成长笔记(14)—— Android中的状态保存探究(上) 我们在用手机的时候可能会发现,即使应用被放到后台再返回到前台数据依然保留(比如说我们正在玩游戏,突然电话 ...
- Android菜鸟的成长笔记(15)—— Android中的状态保存探究(下)
原文:Android菜鸟的成长笔记(15)-- Android中的状态保存探究(下) 在上一篇中我们简单了解关于Android中状态保存的过程和原理,这一篇中我们来看一下在系统配置改变的情况下保存数据 ...
- 【Android 应用开发】Activity 状态保存 OnSaveInstanceState参数解析
作者 : 韩曙亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38297083 一. 相关方法简介 1. 状态保存方法示例 p ...
- Android基础部分再学习---activity的状态保存
主要是bundle 这个參数 參考地址:http://blog.csdn.net/lonelyroamer/article/details/18715975 学习Activity的生命周期,我们知 ...
- HTML5-Canvas 图形变换+状态保存
1. 图形变换 canvas是基于状态绘制图形的.故此一般情况下,canvas的绘制的图形路径和状态时分离的. function drawShape(ctx){ // 绘制路径 shapePath(c ...
- Android view状态保存
为什么我们需要保存View的状态? 这个问题问的好!我坚信移动应用应该帮助你解决问题,而不是制造问题. 想象一下一个非常复杂的设置页面: 这并不是从一个移动应用的截图(这不是典型的win32程序吗.. ...
随机推荐
- Shell中调用可执行文件,手动执行可以执行,crontab执行就报错:exec: java: not found
今天发现一个很奇怪的问题,就是我编写的shell脚本, 手动执行可以正常执行,但是放到crontab中就报错.line 60: exec: java: not found 百度搜索发现原来是java ...
- IIS配置跨域
在IIS里找到HTTP响应标头 添加如下两个标头 Access-Control-Allow-Headers:Content-Type, api_key, Authorization Access-Co ...
- SAS (Statistics Analysis System) 统计分析系统软件
SAS SAS (Statistical Analysis System) 是一个统计软件系统,由 SAS Institute 开发, 用于数据管理, 高级分析, 多元分析, 商业智能, 刑事调查和预 ...
- 老王电子的拆机 ESP32-SOLO-1 填坑报告
ESP32-SOLO-1 拆装 都是带板的, 长这个样子 需要用热风枪从背面吹, 因为中间有焊点, esp32朝下, 用280度大概2到3分钟, 四周需要均匀着风, 用镊子试探天线部分是否松动, 将外 ...
- 多线程系列(七) -ThreadLocal 用法及内存泄露分析
一.简介 在 Java web 项目中,想必很多的同学对ThreadLocal这个类并不陌生,它最常用的应用场景就是用来做对象的跨层传递,避免多次传递,打破层次之间的约束. 比如下面这个HttpSer ...
- 进度条模块之tqdm
导入模块 from tqdm import tqdm import time ''' desc 描述 ncols 进度条总长度 可修改 range(1000) 封装迭代器 ''' for i in t ...
- 【Azure 应用程序见解】通过Azure Funciton的门户启用Application Insights后,Application Insights无法收到监控数据
问题描述 比较早期创建的Azure Funciton服务,近期发现在门户中已经启用了Application Insights功能,但是正确配置Applicaiton Insights后,却无法获取关联 ...
- 【Azure 应用服务】"App Service"如何能判断自身网路没有问题?
问题描述 当创建了一个App Service服务后,如何能判断服务自身网络链路路没有问题? 如果是用VM,通常用Ping可以判断.但是"网站应用App Service" 的Kudu ...
- Postman/Jmeter工具实现接口测试,为什么还要用代码来实现接口自动化测试?
这种工具包括一些开源框架最大缺点就是不够灵活,如果是单接口的测试还行,但是有的项目接口比较庞大和负责,这种情况下就不大适用工具(工具适用于小型项目,代码适用于中大型项目) 主要有以下几个原因: 1敏捷 ...
- Java 常用类 JDK 8 之前日期和时间的API测试
1 package com.bytezero.stringclass; 2 3 import org.junit.Test; 4 5 import java.util.Date; 6 7 8 /** ...