场景
wpf开发。在一些datagrid表中,需要显示enum类型信息。但是enum类型的枚举种类一般都用英文命名,直接显示在ui上可能有些用户不太能理解是什么意思。所以需要在ui上展示其实际中文含义。
解决方案
- 在enum的每个枚举项前增加
[Description("xxxx")]
这样的Attribute限定。 - 在代码中实现ValueConverter类。
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;
}
}
- 在xaml文件的 <Window.Resources>中先定义一个别名,如:
<converter:EnumDescriptionConverter x:Key="DescriptionConverter"/>
- 在需要操作的DataGridTextColumn列设定,如:
<DataGridTextColumn Header="列名" Binding="{Binding 变量名, Converter={StaticResource DescriptionConverter}}"/>
https://stackoverflow.com/questions/8207607/how-to-display-enum-type-in-datagridtextcolumn
https://www.cnblogs.com/smiler/p/3208375.html