做淘寶客為什么要建網(wǎng)站西安seo診斷
一、目的:在開發(fā)過程中綁定的枚舉不想顯示成英文字段怎么辦,這里通過TypeConverter的方式來實現(xiàn)綁定的枚舉從定義的特性中讀取
二、實現(xiàn)
首先定義如下枚舉
[TypeConverter(typeof(DisplayEnumConverter))]public enum MyEnum{[Display(Name = "無")]None,[Display(Name = "第一個")]First,[Display(Name = "第二個")]Second,[Display(Name = "第三個")]Third}
其中DisplayEnumConverter是一個TypeConverter,繼承自EnumConverter
public class DisplayEnumConverter : EnumConverter{public DisplayEnumConverter(Type type): base(type){}public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType){if (destinationType == typeof(string)){if (value != null){FieldInfo field = value.GetType().GetField(value.ToString());if (field != null){DisplayAttribute[] array = (DisplayAttribute[])field.GetCustomAttributes(typeof(DisplayAttribute), inherit: false);if (array.Length == 0 || string.IsNullOrEmpty(array[0].Name)){return value.ToString();}return array[0].Name;}}return string.Empty;}return base.ConvertTo(context, culture, value, destinationType);}public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value){return base.ConvertFrom(context, culture, value);}}
三、環(huán)境
VS2022
四、示例?
頁面上定義一個ComboxBox并綁定該枚舉
<ComboBox ItemsSource="{h:GetEnumSource EnumType={x:Type local:MyEnum}}"/>
對GetEnumSource具體實現(xiàn)參考文章:示例:WPF中綁定枚舉到ComboBox的方式-CSDN博客?
?
顯示效果如下?
五、需要了解的知識點(diǎn)
EnumConverter 類 (System.ComponentModel) | Microsoft Learn
XamlType.TypeConverter Property (System.Xaml) | Microsoft Learn?
六、源碼地址
GitHub - HeBianGu/WPF-ControlDemo: 示例
GitHub - HeBianGu/WPF-ControlBase: Wpf封裝的自定義控件資源庫
GitHub - HeBianGu/WPF-Control: WPF輕量控件和皮膚庫
七、了解更多
System.Windows.Controls 命名空間 | Microsoft Learn
https://github.com/HeBianGu
HeBianGu的個人空間-HeBianGu個人主頁-嗶哩嗶哩視頻