|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.ComponentModel.DataAnnotations;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Runtime.CompilerServices;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
namespace MaterialTraceabilityUI.Common
|
|
|
|
|
{
|
|
|
|
|
public class NotifyPropertyBase : INotifyPropertyChanged, IDataErrorInfo
|
|
|
|
|
{
|
|
|
|
|
private Dictionary<String, String> dataErrors = new Dictionary<string, string>();
|
|
|
|
|
|
|
|
|
|
public string this[string columnName]
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
ValidationContext vc = new ValidationContext(this);
|
|
|
|
|
vc.MemberName = columnName;
|
|
|
|
|
var res = new List<ValidationResult>();
|
|
|
|
|
var result = Validator.TryValidateProperty(this.GetType().GetProperty(columnName).GetValue(this), vc, res);
|
|
|
|
|
if (res.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
AddDic(dataErrors, vc.MemberName);
|
|
|
|
|
return string.Join(Environment.NewLine, res.Select(r => r.ErrorMessage).ToArray());
|
|
|
|
|
}
|
|
|
|
|
RemoveDic(dataErrors, vc.MemberName);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#region 附属方法
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 移除字典
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="dics"></param>
|
|
|
|
|
/// <param name="dicKey"></param>
|
|
|
|
|
private void RemoveDic(Dictionary<String, String> dics, String dicKey)
|
|
|
|
|
{
|
|
|
|
|
dics.Remove(dicKey);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 添加字典
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="dics"></param>
|
|
|
|
|
/// <param name="dicKey"></param>
|
|
|
|
|
private void AddDic(Dictionary<String, String> dics, String dicKey)
|
|
|
|
|
{
|
|
|
|
|
if (!dics.ContainsKey(dicKey)) dics.Add(dicKey, "");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
public string Error => null;
|
|
|
|
|
|
|
|
|
|
public bool IsValided
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return this.dataErrors == null || this.dataErrors.Count == 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
|
|
|
|
|
|
|
|
public void Notify([CallerMemberName] string propName = "")
|
|
|
|
|
{
|
|
|
|
|
if (PropertyChanged != null)
|
|
|
|
|
this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|