using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Runtime.CompilerServices;
namespace IOTContainer.MvvmBase
{
///
/// ViewModel基础类
///
public class ViewModelBase : INotifyPropertyChanged, IDataErrorInfo
{
#region 通知事件
///
/// 特性改变事件
///
public event PropertyChangedEventHandler PropertyChanged;
///
/// 特性改变通知
///
/// 属性名,若为空则自动获取字段名
protected virtual void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
///
/// 更改属性 并通知特性改变
///
/// 属性类型
/// 属性
/// 改变值
/// 属性名,若为空则自动获取字段名
protected void SetProperty(ref T member, T value, [CallerMemberName] string propertyName = null)
{
if (!object.Equals(member, value))
{
member = value;
this.RaisePropertyChanged(propertyName);
}
}
#endregion
#region 数据验证
///
/// 验证完整性错误
///
public string Error
{
get
{
var resultes = new List();
var context = new ValidationContext(this);
if (!Validator.TryValidateObject(this, context, resultes, true) && resultes.Count > 0)
{
return string.Join(Environment.NewLine, resultes.Select(r => r.ErrorMessage).ToArray());
}
return string.Empty;
}
}
///
/// 验证具体字段错误
///
///
///
public string this[string columnName]
{
get
{
var resultes = new List();
var context = new ValidationContext(this);
context.MemberName = columnName;
var value = this.GetType().GetProperty(columnName).GetValue(this, null);
if (!Validator.TryValidateProperty(value, context, resultes) && resultes.Count > 0)
{
return string.Join(Environment.NewLine, resultes.Select(r => r.ErrorMessage).ToArray());
}
return string.Empty;
}
}
#endregion
}
}