using System; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; namespace Szmedi.RvKits.Models { public class TreeModel : INotifyPropertyChanged, IComparable { /// /// 是否展开 /// public bool IsExpanded { get => _isExpanded; set { if (value != _isExpanded) { //折叠状态改变 _isExpanded = value; NotifyPropertyChanged("IsExpanded"); } } } /// /// 是否选中 /// public bool? IsChecked { get => _isChecked; set { if (value != _isChecked) { _isChecked = value; NotifyPropertyChanged("IsChecked"); } } } /// /// 子项 /// public IList Children { get; set; } public object Tag { get; set; } /// /// 键值 /// public string Id { get; set; } /// /// 显示的字符 /// public string Name { get; set; } /// /// 图标 /// public string Icon { get; set; } /// /// 指针悬停时的显示说明 /// public string ToolTip => Parent == null ? string.Format(Name) : string.Format("{0}-{1}", Parent.Name, Name);//return String.Format(Name); /// /// 父项 /// public TreeModel Parent { get; set; } /// /// 构造 /// public TreeModel() { Children = new ObservableCollection(); _isChecked = false; //Icon = "./Images/16_16/File_16px.png"; //Icon = FamilyPlugins.Properties.Resource.Folder_32px; IsExpanded = false; } #region 排序 /// /// 排序 /// /// /// public int CompareTo(object obj) { var treeModel = (TreeModel)obj; return Name == treeModel.Name ? 0 : Name.CompareTo(treeModel.Name) > 0 ? 1 : -1; } #endregion 排序 #region 设置所有子项的选中状态 /// /// 设置所有子项的选中状态 /// public void SetChildrenChecked() { if (Children != null && Children.Count > 0 && IsChecked != null) { foreach (var child in Children) { child.IsChecked = IsChecked; if (child.Children != null && Children.Count > 0) { child.SetChildrenChecked(); } } } } #endregion 设置所有子项的选中状态 #region 设置所有子项的选中状态 /// /// 设置所有子项的选中状态 /// /// public void SetChildrenChecked(bool isCheck) { if (Children != null && Children.Count > 0) { foreach (var child in Children) { child.IsChecked = isCheck; if (child.Children != null && Children.Count > 0) { child.SetChildrenChecked(isCheck); } } } } #endregion 设置所有子项的选中状态 #region 设置所有子项展开状态 /// /// 设置所有子项展开状态 /// /// public void SetChildrenExpanded(bool isExpanded) { foreach (var child in Children) { child.IsExpanded = isExpanded; child.SetChildrenExpanded(isExpanded); } } #endregion 设置所有子项展开状态 #region 使父节点处于选中状态 /// /// 使父节点处于选中状态 /// public void SetParentChecked() { if (Parent != null) { if (Parent.Children.Where(c => c.IsChecked == null).Count() > 0) { Parent.IsChecked = null; } else if (Parent.Children.Where(c => c.IsChecked == true).Count() == 0) { Parent.IsChecked = false; } else if (Parent.Children.Where(c => c.IsChecked == true).Count() == Parent.Children.Count) { Parent.IsChecked = true; } else if (Parent.Children.Where(c => c.IsChecked == true).Count() < Parent.Children.Count) { Parent.IsChecked = null; } if (Parent.Parent != null) { Parent.SetParentChecked(); } } } #endregion 使父节点处于选中状态 #region 私有变量 /// /// 选中状态 /// private bool? _isChecked; /// /// 折叠状态 /// private bool _isExpanded; #endregion 私有变量 #region 获取属性修改 /// /// 属性改变事件 /// public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(string info) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(info)); } } #endregion 获取属性修改 } }