WPF绑定枚举并且显示特性文本

news/2024/11/20 19:20:38/文章来源:https://www.cnblogs.com/nihaozaijian/p/18519329

一、文件结构

 

二、文件内容

FlattenMethodEnum.cs
     public enum FlattenMethodEnum{[Description("单点")]SinglePoint = 0,[Description("平均")]Average = 1,}
}

EnumBindingSourceExtension.cs

using System.Windows.Markup;
using System.Diagnostics.CodeAnalysis;
namespace Test.Helper {class EnumBindingSourceExtension : MarkupExtension{private Type? _enumType;public Type? EnumType{get => _enumType;set{if (value != _enumType){if (value != null){Type enumType = Nullable.GetUnderlyingType(value) ?? value;if (!enumType.IsEnum)throw new ArgumentException("Type must be for an Enum.");}_enumType = value;}}}public EnumBindingSourceExtension() { }public EnumBindingSourceExtension(Type enumType){EnumType = enumType;}public override object ProvideValue(IServiceProvider serviceProvider){if (_enumType == null)throw new InvalidOperationException("The EnumType must be specified.");var actualEnumType = Nullable.GetUnderlyingType(_enumType) ?? _enumType;var enumValues = System.Enum.GetValues(actualEnumType);if (actualEnumType == _enumType)return enumValues;var tempArray = Array.CreateInstance(actualEnumType, enumValues.Length + 1);enumValues.CopyTo(tempArray, 1);return tempArray;}} }

EnumDescriptionConverter.cs

using System.Windows.Data;
using System.ComponentModel;
using System.Globalization;
using System.Windows;namespace Test.Helper
{class EnumDescriptionConverter:IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value == null)return DependencyProperty.UnsetValue;return GetEnumDescription(value);}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return string.Empty;}private string GetEnumDescription(object enumObj){var fi = enumObj.GetType().GetField(enumObj.ToString());DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);if (attributes != null && attributes.Length > 0)return attributes[0].Description;elsereturn enumObj.ToString();}}
}

三、使用

1、在View中引入命名空间

xmlns:enum="clr-namespace:Test.Enum"
xmlns:helper="clr-namespace:Test.Helper"  

2、引入资源; Tip:注意UserControl还是Window等

<UserControl.Resources><helper:EnumBindingSource x:Key="enumDataSource" EnumType="{x:Type enum:SampleTypeEnum}"/><helper:EnumDescriptionConverter x:Key="enumDescriptionConverter"/>
</UserControl.Resources>

3、ViewModel

[ObservableProperty]
private SampleTypeEnum sampleTypeEnum;

4、xaml

<ComboBox Width="80" Height="20"ItemsSource="{Binding Source={StaticResource enumDataSource}}"SelectedItem="{Binding SampleTypeEnum}"><ComboBox.ItemTemplate><DataTemplate><TextBlock Text="{Binding Converter={StaticResource enumDescriptionConverter}}"/></DataTemplate></ComboBox.ItemTemplate>
</ComboBox>

 

实现前台绑定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/837477.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【知识库搭建】提高企业知识管理和服务效率

在当今信息爆炸的时代,企业知识管理的重要性日益凸显。有效的知识管理不仅能够促进内部信息共享,提升团队协作效率,还能增强企业的核心竞争力。本文将探讨如何通过搭建知识库系统,特别是利用HelpLook工具,优化企业知识管理和服务流程,从而提高企业运营效率。 一、知识库搭…

高级程序语言设计第八个个人作业

2024高级语言程序设计:https://edu.cnblogs.com/campus/fzu/2024C 高级语言程序设计课程第五次作业:https://edu.cnblogs.com/campus/fzu/2024C/homework/13304 学号:102400231 姓名:袁志华 作业 第11章 12367第12章 12389

人工智能之机器学习基础——贝叶斯(Bayesian Methods)

贝叶斯分类器 贝叶斯分类器是一类基于贝叶斯定理的统计学习方法,广泛应用于分类问题。其核心思想是通过计算后验概率 P(y∣x),将输入样本 x 分类到具有最大后验概率的类别。 1. 贝叶斯定理 贝叶斯定理是概率论中的基本法则,用于描述条件概率的关系: 其中:P(y∣x):在已知…

2024.11.20 NOIP模拟 - 模拟赛记录

异或(xor) 每次所加三角形的范围如图所示:这道题做法较多,我是通过两组差分与前缀和来做的。 首先需要一个三角形差分,使每一次在差分数组中修改时,影响到的范围是一个三角形,比如这样(红色点为 \((x,y)\),即 \((r,c)\)):假设我们真正需要修改的三角形是橙色部分:那…

实时多模态 AI 的 N 种新可能丨实时互动和大模型专场@RTE2024回顾

在本届 RTE2024 大会上,来自产业界和学术界的多位专家深入探讨了实时互动和大模型技术的最新进展及其潜在应用。西湖心辰联合创始人俞佳、声网 AI 算法工程师乔齐、MiniMax 资深音频算法专家张博闻、商汤科技数字文娱解决方案负责人焦文奎以及面壁智能算法 VP 翟忠武等分享了他…

vscode主题美化

vscode 主题美化 主题使用Tokyo Night由于我在用rust的时候发现其对一些变量的颜色不太好看,所以自己又在设置中改了一点"editor.tokenColorCustomizations": {...."[Tokyo Night]": { // or "[Tokyo Night Storm]""textMateRules": […

2024.11.20总结

1本文于 github 博客同步更新。 A: 一个数可以被操作当且仅存在一列的顶部元素为它且存在一列的底部元素为它,初始扫一遍,将合法的元素以顶部所在列为关键字扔到小根堆里,每次找到最小的元素添加,然后检查将新露出来的元素是否存在匹配,若结束时未填完即为无解。 B: 要么…

ABAP 日期计算

RP_CALC_DATE_IN_INTERVAL 日期函数2 FIMA_DATE_CREATE 有问题 在2月份计算有问题 慎用 计算两个日期月份 FIMA_DAYS_AND_MONTHS_AND_YEARS

群晖NAS维修数据恢复

一台群晖NAS,开机状态灯是黄灯,DISC4也是亮黄灯,机器一直在报警。 群辉型号DS415+,是一种典型的硬盘损坏的情况,这是一台四盘位的一个群辉NAS,第一时间把每个硬盘取下来编个编号,WD的红盘也就是nasVR专用硬盘,型号是WD401F2X的,生产日期有三块是2015年,有一块是比较新…

实景三维技术在基层社会治理中的数智化应用

在推进国家治理体系和治理能力现代化的进程中,基层社会治理的数字化转型尤为关键。实景三维技术,以其直观、精准的空间信息表达能力,正在成为基层社会治理的有力工具。本文将探讨实景三维技术如何在“地、房、人、用、管”五个维度赋能基层社会治理。一、实景三维技术简介实…