年度变更建库软件5.0版本
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

97 lines
3.1 KiB

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
namespace Kingo.Plugin.BGResultManager.ViewModel
{
public class ResultsCatalog : INotifyPropertyChanged
{
public string Name { get; set; }
public string Path { get; set; }
public string Desc { get; set; }
/// <summary>
/// 拷贝文件原始路径
/// </summary>
public string CopyFile { get; set; }
/// <summary>
/// IsChecked
/// </summary>
///<remarks></remarks>
private bool? _isChecked = false;
public bool? IsChecked
{
set
{
_isChecked = value;
if (PropertyChanged != null) PropertyChanged.Invoke(this, new PropertyChangedEventArgs("IsChecked"));
SetIsCheckedByParent(value);
if (Parent != null) Parent.SetIsCheckedByChild(value);
}
get { return this._isChecked; }
}
public ResultsCatalog Parent { get; set; }
public bool IsExpanded { get; set; }
public string Type { get; set; }
/// <summary>
/// 文件类型(只有当Type=File时有效)
/// </summary>
public string FileType { get; set; }
/// <summary>
/// 文件模板(只有当Type=File时有效)
/// </summary>
public string FileTempalate { get; set; }
public List<ResultsCatalog> SubCatalog { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
/// <summary>
/// 子节点的isChecked改变了, 通知父节点是否要跟着改变 isChecked
/// </summary>
/// <param name="value"></param>
public virtual void SetIsCheckedByChild(bool? value)
{
if (this._isChecked == value)
{
return;
}
bool isAllChildrenChecked = this.SubCatalog.All(c => c.IsChecked == value);
if (!isAllChildrenChecked)
{
this._isChecked = null;
}
else
{
this._isChecked = value;
}
if (PropertyChanged != null) PropertyChanged.Invoke(this, new PropertyChangedEventArgs("IsChecked"));
if (Parent != null) Parent.SetIsCheckedByChild(value);
}
/// <summary>
/// 父节点isChecked改变了, 所有子节点跟着改变
/// </summary>
/// <param name="value"></param>
public virtual void SetIsCheckedByParent(bool? value)
{
this._isChecked = value;
if (PropertyChanged != null) PropertyChanged.Invoke(this, new PropertyChangedEventArgs("IsChecked"));
if (SubCatalog == null)
{
return;
}
foreach (var child in SubCatalog)
{
child.SetIsCheckedByParent(value);
}
}
}
}