1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Text;
namespace MultiLayout.UiModule
{
/// <summary>
///
/// </summary>
public class UIModuleParam : INotifyPropertyChanged
{
/// <summary>
/// 控件唯一标示
/// </summary>
public int ID { get; set; }
/// <summary>
///
/// </summary>
/// <param name="propertyName"></param>
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
/// <summary>
///
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
}
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class UIModuleParams<T> : INotifyPropertyChanged
where T : UIModuleParam
{
/// <summary>
///
/// </summary>
[Newtonsoft.Json.JsonIgnore]
public string FilePath;
/// <summary>
///
/// </summary>
public List<T> Items { get; set; } = new List<T>();
/// <summary>
/// 只保存 IDs 的控件
/// </summary>
/// <param name="IDs"></param>
public virtual void MatchParam(int[] IDs)
{
if (Items.RemoveAll(i => { return !IDs.Contains(i.ID); }) > 0)
{
Save();
}
}
/// <summary>
/// 保存
/// </summary>
/// <returns></returns>
public virtual bool Save()
{
try
{
string json = Newtonsoft.Json.JsonConvert.SerializeObject(this);
File.WriteAllText(FilePath, json);
}
catch
{
return false;
}
return true;
}
/// <summary>
/// 读取
/// </summary>
/// <returns></returns>
public virtual bool Load()
{
try
{
string json = File.ReadAllText(FilePath);
Newtonsoft.Json.JsonConvert.PopulateObject(json, this);
return true;
}
catch
{
return false;
}
}
/// <summary>
///
/// </summary>
/// <param name="propertyName"></param>
protected void NotifyPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
/// <summary>
///
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
}
}