(十七)ComboBox控件扩展功能(绑定枚举元素)
1. 创建枚举
- 在core enums
![image]()
补充知识点
Enum与string、int的转换
public enum Mode
{
Study,
Examination
}
1、enum转String
Enum.GetName(typeof(Mode), Mode.Study);
或者采用ToString方法:
Mode.Study.ToString();
2、string转enum
mode = (Mode)Enum.Parse(typeof(Mode), "Study", false);
ignoreCase值设置了false,是指是否忽略大小写
3、enum转int
enum转int采用int强转的方法:
(int)Mode.Study;
4、int转enum
(Mode)Enum.ToObject(typeof(Mode), 1);
同样,也可以强转:(Mode)1;
高级点用法,反射元数据
using System;
using System.ComponentModel;
namespace TestEnum
{
//基础枚举
public enum Name
{
[Description("鲍勃")]
[DataTest("中文3级")]
boob,
[Description("马宇")]
[DataTest("中文2级")]
JackMa,
[Description("陈龙")]
[DataTest("中文1级")]
JackChan,
[Description("丽莎")]
[DataTest("中文2级")]
Lisa,
[Description("保罗")]
[DataTest("中文2级")]
Poro
}
public class DataTest : Attribute
{
public string Data { get; set; }
public DataTest(string data)
{
Data = data;
}
public DataTest(){}
}
static class EnumExtensions
{
public static string GetDescription(this Enum val)
{
var field = val.GetType().GetField(val.ToString());
var customAttribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute));
return customAttribute == null ? val.ToString() : ((DescriptionAttribute)customAttribute).Description;
}
public static string GetData(this Enum val)
{
var field = val.GetType().GetField(val.ToString());
var customAttribute = Attribute.GetCustomAttribute(field, typeof(DataTest));
return customAttribute == null ? val.ToString() : ((DataTest)customAttribute).Data;
}
}
}
我的GetDescription
public static string GetEnumDescription(this object obj)
{
Assert.NotNull(obj);
var type = obj.GetType();
if (!type.IsEnum)
{
throw new Exception($"{type.FullName}必须为枚举类型");
}
FieldInfo fieldInfo=obj.GetType().GetField(obj.ToString());
if (fieldInfo != null)
{
DescriptionAttribute attribute=Attribute.GetCustomAttribute(fieldInfo, typeof(DescriptionAttribute)) as DescriptionAttribute;
if(attribute != null)
{
return attribute.Description;
}
else
{
return fieldInfo.Name;
}
}
else
{
return string.Empty;
}
}
Attribute.GetCustomAttribute

DescriptionAttribute
指定属性或事件的说明。


2. 绑定源的元素实体

把枚举类转换成一个BindableSourceItem的集合
public static IEnumerable<BindableSourceItem<T>> GetBindableSourceItems<T>(this object obj,Func<T, bool> filter = null)where T : struct
{
var type=typeof(T);//T代表ZoomMode这个model
if (!type.IsEnum)
{
throw new Exception($"{type.FullName}必须为枚举类型");
}
//ZoomMode变成一个BindableSourceItem的集合
var items =type.GetEnumValues().Cast<T>().Select(x =>new BindableSourceItem<T>()
{
//x代表具体某一个项
Description=x.GetEnumDescription(),
Value=x,
});
if(filter != null)
{
items = items.Where(p => filter(p.Value));
}
return items;
}
3.前台页面怎么使用
- mainview
![image]()
![image]()
4. binding方法

具体实现






浙公网安备 33010602011771号