75 lines
2.2 KiB
C#
75 lines
2.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Data;
|
|
|
|
namespace Cowain.Bake.Common.Converter
|
|
{
|
|
public class EnumDescriptionConverter : IValueConverter
|
|
{
|
|
private string GetEnumDescription(Enum enumObj)
|
|
{
|
|
FieldInfo fieldInfo = enumObj.GetType().GetField(enumObj.ToString());
|
|
var descriptionAttr = fieldInfo
|
|
.GetCustomAttributes(false)
|
|
.OfType<DescriptionAttribute>()
|
|
.Cast<DescriptionAttribute>()
|
|
.SingleOrDefault();
|
|
if (descriptionAttr == null)
|
|
{
|
|
return enumObj.ToString();
|
|
}
|
|
else
|
|
{
|
|
return descriptionAttr.Description;
|
|
}
|
|
}
|
|
|
|
object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
Enum myEnum = (Enum)value;
|
|
string description = GetEnumDescription(myEnum);
|
|
return description;
|
|
}
|
|
|
|
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
return string.Empty;
|
|
}
|
|
}
|
|
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
}
|