1.前言
在项目中遇到需要访问类中属性名,但又需要重定义属性名的情况。这里使用DescriptionAttribute标签实现。
2.代码
2.1实体类ParamsetMoadel
public class ParamSetModel : INotify
{
public bool IsColour { get; set; } = true;
private int _id;
public int Id
{
get { return _id; }
set
{
if (_id == value) return;
_id = value;
OnPropertyChanged();
}
}
private bool _IsCheck;
public bool IsCheck
{
get { return _IsCheck; }
set
{
if (_IsCheck == value) return;
_IsCheck = value;
OnPropertyChanged();
}
}
private string _paramCode;
[Description("参数编码")]
public string ParamCode
{
get { return _paramCode; }
set
{
if (_paramCode == value) return;
if (_paramCode != null&& IsColour)
{
ParamCodeColour = "#ff1047";
}
_paramCode = value;
OnPropertyChanged();
}
}
private string _paramName;
[Description("参数名称")]
public string ParamName
{
get { return _paramName; }
set
{
if (_paramName == value) return;
if (_paramName != null && IsColour)
{
ParamNameColour = "#ff1047";
}
_paramName = value;
OnPropertyChanged();
}
}
private string _upperValue;
[Description("配方上限值")]
public string UpperValue
{
get { return _upperValue; }
set
{
if (_upperValue == value) return;
if (_upperValue != null && IsColour)
{
UpperValueColour = "#ff1047";
}
_upperValue = value;
OnPropertyChanged();
}
}
private string _lowerValue;
[Description("配方下限值")]
public string LowerValue
{
get { return _lowerValue; }
set
{
if (_lowerValue == value) return;
if (_lowerValue != null && IsColour)
{
LowerValueColour = "#ff1047";
}
_lowerValue = value;
OnPropertyChanged();
}
}
private string _setValue;
[Description("配方设定值")]
public string SetValue
{
get { return _setValue; }
set
{
if (_setValue == value) return;
if (_setValue != null && IsColour)
{
SetValueColour = "#ff1047";
}
_setValue = value;
OnPropertyChanged();
}
}
private string _paramCodeColour = "#3F4043";
public string ParamCodeColour
{
get { return _paramCodeColour; }
set
{
if (_paramCodeColour == value) return;
_paramCodeColour = value;
OnPropertyChanged();
}
}
private string _paramNameColour = "#3F4043";
public string ParamNameColour
{
get { return _paramNameColour; }
set
{
if (_paramNameColour == value) return;
_paramNameColour = value;
OnPropertyChanged();
}
}
private string _upperValueColour = "#3F4043";
public string UpperValueColour
{
get { return _upperValueColour; }
set
{
if (_upperValueColour == value) return;
_upperValueColour = value;
OnPropertyChanged();
}
}
private string _lowerValueColour = "#3F4043";
public string LowerValueColour
{
get { return _lowerValueColour; }
set
{
if (_lowerValueColour == value) return;
_lowerValueColour = value;
OnPropertyChanged();
}
}
private string _setValueColour = "#3F4043";
public string SetValueColour
{
get { return _setValueColour; }
set
{
if (_setValueColour == value) return;
_setValueColour = value;
OnPropertyChanged();
}
}
}
2.2调用方法
//应用在了DataTable转换成List实例当中,导入dataTable表头为中文,需要跟属性名称对应上,所以这里采用特性的方法解决
public List<T> TableToListModel<T>(DataTable dt) where T : new()
{
// 定义集合
List<T> ts = new List<T>();
// 获得此模型的类型
Type type = typeof(T);
string tempName = "";
foreach (DataRow dr in dt.Rows)
{
T t = new T();
// 获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name; // 检查DataTable是否包含此列
if (pi.IsDefined(typeof(DescriptionAttribute), true))//判断是否应用DescriptionAttribute特性
{
tempName = pi.GetCustomAttribute<DescriptionAttribute>().Description;//获取该属性的特性值
}
if (dt.Columns.Contains(tempName))
{
// 判断此属性是否有Setter
if (!pi.CanWrite) continue;
object value = dr[tempName];
if (value != DBNull.Value)
pi.SetValue(t, value.ToString(), null);
}
}
ts.Add(t);
}
return ts;
}
结论
该问自己记录学习使用