添加项目文件。
This commit is contained in:
65
Sai.Toolkit.Mvvm/Converters/EnumDescriptionConverter.cs
Normal file
65
Sai.Toolkit.Mvvm/Converters/EnumDescriptionConverter.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
using System.ComponentModel;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace Sai.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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user