Files
06-Note/DateGridColumnComboBoxBindingEnumDescription/EnumDescriptionConvert.cs

49 lines
1.6 KiB
C#
Raw Normal View History

2023-06-20 09:22:53 +08:00
public class EnumDescriptionConvert : Collection<String>, IValueConverter
{
private Type type;
private IDictionary<Object, Object> valueToNameMap;
private IDictionary<Object, Object> nameToValueMap;
public Type Type
{
get { return this.type; }
set
{
if (!value.IsEnum)
throw new ArgumentException("类型不是枚举类", "value");
this.type = value;
Initialize();
}
}
public Object Convert(Object value, Type targetType, Object parameter, CultureInfo culture)
{
return this.valueToNameMap[value];
}
public Object ConvertBack(Object value, Type targetType, Object parameter, CultureInfo culture)
{
return this.nameToValueMap[value];
}
private void Initialize()
{
this.valueToNameMap = this.type
.GetFields(BindingFlags.Static | BindingFlags.Public)
.ToDictionary(fi => fi.GetValue(null), GetDescription);
this.nameToValueMap = this.valueToNameMap
.ToDictionary(kvp => kvp.Value, kvp => kvp.Key);
Clear();
foreach (String name in this.nameToValueMap.Keys)
Add(name);
}
private static Object GetDescription(FieldInfo fieldInfo)
{
var descriptionAttribute =
(DescriptionAttribute)Attribute.GetCustomAttribute(fieldInfo, typeof(DescriptionAttribute));
return descriptionAttribute != null ? descriptionAttribute.Description : fieldInfo.Name;
}
}