示例:WPF中绑定枚举到ComboBox想显示成中文或自定义名称如何实现

一、目的:在开发过程中绑定的枚举不想显示成英文字段怎么办,这里通过TypeConverter的方式来实现绑定的枚举从定义的特性中读取


二、实现

首先定义如下枚举

    [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);
        }
    }

三、环境


VS2022

四、示例 

页面上定义一个ComboxBox并绑定该枚举

<ComboBox ItemsSource="{h:GetEnumSource EnumType={x:Type local:MyEnum}}"/>

对GetEnumSource具体实现参考文章:示例:WPF中绑定枚举到ComboBox的方式-CSDN博客 

 

显示效果如下 

五、需要了解的知识点

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个人主页-哔哩哔哩视频

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 10:36:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 10:36:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 10:36:02       82 阅读
  4. Python语言-面向对象

    2024-06-18 10:36:02       91 阅读

热门阅读

  1. MyBatis 特殊SQL执行技巧与注意事项

    2024-06-18 10:36:02       28 阅读
  2. 《爱的艺术》读书笔记

    2024-06-18 10:36:02       37 阅读
  3. pytorch基础【3】torch运算

    2024-06-18 10:36:02       38 阅读
  4. 深度神经网络

    2024-06-18 10:36:02       36 阅读
  5. 006、全局配置参数字典plt.rcParams

    2024-06-18 10:36:02       39 阅读
  6. SpringTask定时任务框架

    2024-06-18 10:36:02       58 阅读
  7. 考研计算机网络(第一章 概述)

    2024-06-18 10:36:02       35 阅读
  8. Babelfish for PostgreSQL

    2024-06-18 10:36:02       36 阅读
  9. CCAA认证人员考试各科涉及法律法规汇总

    2024-06-18 10:36:02       34 阅读