Files
Shrlalgo.RvKits/ShrlAlgo.Toolkit.Mvvm/Converters/EnumDescriptionConverter.cs

66 lines
2.0 KiB
C#

using System.ComponentModel;
using System.Globalization;
using System.Reflection;
using System.Windows.Data;
namespace ShrlAlgo.Toolkit.Mvvm.Converters;
/// <summary>
/// 枚举描述转换
/// </summary>
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<DescriptionAttribute>().SingleOrDefault();
return descriptionAttr == null ? enumObj.ToString() : descriptionAttr.Description;
}
}
/// <summary>
/// 枚举类上加特性[TypeConverter(typeof(EnumDescriptionTypeConverter))]
/// </summary>
//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);
}
}