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; } }