博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Enum Binding ItemsSource In WPF
阅读量:4926 次
发布时间:2019-06-11

本文共 2418 字,大约阅读时间需要 8 分钟。

在WPF中枚举绑定到ItemsSource。 一、通过ObjectDataProvider 获取Enum数据源 首先我们定义一个Enum类: public enum TableSelectedType { SelectedOne, SelectedTwo, SelectedThird } 接着在Xaml中的Resource里定义数据源。 我们这里写好了一个Enum数据源,他的key是odp。我们把它绑定到ComboBox的ItemsSource上看下。 效果图: image 但是有时候,我们要绑定的是Enum,但想显示它相应的中文字符串。比如“SelectOne”显示为“第一条”。 这里我用到了转换器(Converter). 代码 xaml中: 代码 效果: image 二、通过Dictionary来存Enum,并绑定到ItemsSource上 这种方便且效率高。我们还是用上面的Enum类型。我们声明一个Dictionary的属性TableSelectedTypeCollection ,并对他初始话。 public partial class ConboBoxEnum : UserControl { public ConboBoxEnum() { InitializeComponent(); TableSelectedTypeCollection=new Dictionary(); TableSelectedTypeCollection.Add(TableSelectedType.SelectedOne,"第一条"); TableSelectedTypeCollection.Add(TableSelectedType.SelectedTwo,"第二条"); TableSelectedTypeCollection.Add(TableSelectedType.SelectedThird,"第三条"); this.DataContext = this; } public Dictionary TableSelectedTypeCollection { get; set; } } Xaml中,我们用TableSelectedTypeCollection 来绑定ComboBox的ItemsSource。 这里我们用Value来显示它对应的中文字。SelectedValue来绑定它的Enum类型。因为后台我们通常用Enum中的类型。 效果还是一样。 image 三、通过特性(Attribute)来获取 这里用到了MS命名空间下的using System.ComponentModel;在枚举元素上加Description这个特性。 public enum TableSelectedType { [Description("选择第一行")] SelectedOne, [Description("选择第二行")] SelectedTwo, [Description("选择第三行")] SelectedThird } 我们写一个EnumHelper来获取它。 public static class EnumHelper { public static T GetEnumAttribute(Enum source)where T:Attribute { Type type = source.GetType(); var sourceName = Enum.GetName(type, source); FieldInfo field = type.GetField(sourceName); object[] attributes = field.GetCustomAttributes(typeof (T), false); foreach (var o in attributes) { if (o is T) return (T) o; } return null; } public static string GetDescription(Enum source) { var str = GetEnumAttribute(source); if (str==null) return null; return str.Description; } } 然后我们在实例化这个枚举的时候,调用它就可以。 public Dictionary TableSelectedTypeDictionary { get; set; } public ConboBoxEnum() { InitializeComponent(); TableSelectedTypeDictionary=new Dictionary(); TableSelectedTypeDictionary.Add(TableSelectedType.SelectedOne, EnumHelper.GetDescription(TableSelectedType.SelectedOne)); TableSelectedTypeDictionary.Add(TableSelectedType.SelectedTwo, EnumHelper.GetDescription(TableSelectedType.SelectedTwo)); TableSelectedTypeDictionary.Add(TableSelectedType.SelectedThird, EnumHelper.GetDescription(TableSelectedType.SelectedThird)); this.DataContext = this; }

转载于:https://www.cnblogs.com/sjqq/p/6946011.html

你可能感兴趣的文章
iis7.5+win2008 出现 HTTP Error 503. The service is unavailable.
查看>>
python7
查看>>
python的and和or优先级
查看>>
if 调用common里的函数
查看>>
使用spring.net+nibernate时如何用aspnet_regiis加密数据库连接字符串
查看>>
UNION
查看>>
九.配置SMB共享(Samba共享)
查看>>
正则表达式
查看>>
Oracle RMAN Recover中使用BBED 跳过缺失的归档 继续 Recover 的测试
查看>>
定期备份脚本
查看>>
生成桌面插件
查看>>
Unable to resolve target 'android-9'
查看>>
vector和list的区别
查看>>
[LeetCode] 127. Word Ladder _Medium tag: BFS
查看>>
20172302 《程序设计与数据结构》第四周学习总结
查看>>
FZU 2086 餐厅点餐(枚举)
查看>>
HDU 2188 悼念512汶川大地震遇难同胞——选拔志愿者(基础巴什博奕)
查看>>
多态,虚函数
查看>>
Could not obtain information about Windows NT group/user 'xxxx\xxxx', error code 0x5
查看>>
get_locked_objects_rpt.sql
查看>>