using System.ComponentModel; using System.Globalization; using System.Reflection; using System.Windows.Data; namespace Sai.Toolkit.Mvvm.Converters; /// /// 枚举描述转换 /// public class EnumDescriptionConverter : IValueConverter { object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture) { var myEnum = (Enum)value; var description = GetEnumDescription(myEnum); return description; } object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return string.Empty; } private string GetEnumDescription(Enum enumObj) { var fieldInfo = enumObj.GetType().GetField(enumObj.ToString()); var descriptionAttr = fieldInfo.GetCustomAttributes(false).OfType().SingleOrDefault(); return descriptionAttr == null ? enumObj.ToString() : descriptionAttr.Description; } } /// /// 枚举类上加特性[TypeConverter(typeof(EnumDescriptionTypeConverter))] /// //TODO 待测试 public class EnumDescriptionTypeConverter : EnumConverter { public EnumDescriptionTypeConverter(Type type) : base(type) { } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) { if (null != value) { FieldInfo fi = value.GetType().GetField(value.ToString()); if (null != fi) { var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); return ((attributes.Length > 0) && (!string.IsNullOrEmpty(attributes[0].Description))) ? attributes[0].Description : value.ToString(); } } return string.Empty; } return base.ConvertTo(context, culture, value, destinationType); } }