枚举类定义
public class EnumItem
{
public string Text { get; set; }
public int Value { get; set; }
public string Description { get; set; }
public EnumItem(string text, int value, string description)
{
Text = text;
Value = value;
Description = description;
}
}
获取枚举文本,值和描述的方法 public static List<EnumItem> GetEnumItems(Type enumType)
{
var list = new List<EnumItem>();
if (enumType.IsEnum != true)
{
throw new InvalidOperationException();
}
var typeDescription = typeof(DescriptionAttribute);
var fields = enumType.GetFields();
foreach (var field in fields)
{
if (field.FieldType.IsEnum == false)
continue;
var value = (int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null);
var description = string.Empty;
var arr = field.GetCustomAttributes(typeDescription, true);
if (arr.Length > 0)
{
var aa = (DescriptionAttribute)arr[0];
description = aa.Description;
}
else
{
description = field.Name;
}
var text = field.Name;
if (description != "NotBind")
list.Add(new EnumItem(text, value, description));
}
return list;
}
页面上下文中绑定的获取枚举的参数
public ObservableCollection<EnumItem> Sex => new ObservableCollection<EnumItem>(EnumHelper.GetEnumItems(typeof(Sex)));
页面端代码
<ComboBox Grid.Row="2" Grid.Column="1"
VerticalAlignment="Center" Margin="0,12,0,2" Grid.ColumnSpan="2"
ItemsSource="{Binding DataContent.Sex}"
DisplayMemberPath="Description"
SelectedValuePath="Text" />
其中DisplayMemberPath="Description"意为将显示成员的路径指定为itemsSource所指定的Sex的成员Description
简单点说就是,显示的具体内容为Sex的Description项
其他的Path以此类推,只需填写成员的名称即可,无需再绑定和指定具体的路径,因为ItemsSource已经描述了路径位置了