当前位置: 首页 > news >正文

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

相关文章:

  • utf8和utf8mb4的主要区别
  • OceanBase 并行执行参数 parallel_servers_target 理解
  • git提交错了?别慌,直接删除提交记录
  • 机器学习实验--- 金融数据基础与计算在线实验闯关
  • git的Cherry pick
  • shell中的流程控制
  • numpy用savez_compressed压缩数据
  • 比较日志性能:Glog、Spdlog 和 ofstream 在不同硬件上的表现(推荐Spdlog)
  • 新服务器常见设置
  • 【diffusers 极速入门(二)】如何得到扩散去噪的中间结果?Pipeline callbacks 管道回调函数
  • 移植案例与原理 - HDF驱动框架-驱动配置(2)
  • Linux常用操作大全(下)
  • Google 广告VS Facebook广告:哪个更适合我?2024全维度区别详解
  • 中国500米分辨率年平均LAI数据集(2000-2020)
  • PLC模拟量和数字量到底有什么区别?
  • 【node学习】协程
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Android开源项目规范总结
  • eclipse的离线汉化
  • ES6之路之模块详解
  • Intervention/image 图片处理扩展包的安装和使用
  • js继承的实现方法
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Sublime Text 2/3 绑定Eclipse快捷键
  • swift基础之_对象 实例方法 对象方法。
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Unix命令
  • 爱情 北京女病人
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 嵌入式文件系统
  • 一些css基础学习笔记
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​ssh免密码登录设置及问题总结
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • # 达梦数据库知识点
  • #每日一题合集#牛客JZ23-JZ33
  • $(selector).each()和$.each()的区别
  • (~_~)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (k8s)kubernetes集群基于Containerd部署
  • (poj1.3.2)1791(构造法模拟)
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (Python第六天)文件处理
  • (多级缓存)多级缓存
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (接口自动化)Python3操作MySQL数据库
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会