【C#】在WPF的Datagrid中显示Enum类型的Description Attribute 信息

场景

wpf开发。在一些datagrid表中,需要显示enum类型信息。但是enum类型的枚举种类一般都用英文命名,直接显示在ui上可能有些用户不太能理解是什么意思。所以需要在ui上展示其实际中文含义。

解决方案

  1. 在enum的每个枚举项前增加[Description("xxxx")]这样的Attribute限定。
  2. 在代码中实现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;
		}
	}
  1. 在xaml文件的 中先定义一个别名,如:
<converter:EnumDescriptionConverter x:Key="DescriptionConverter"/>
  1. 在需要操作的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

你可能感兴趣的:(C#/.NET,WPF)