1

有没有办法将组合框绑定到枚举,因为没有方法可以获取枚举的所有值?

我的枚举是这样的:

public enum SportName
{
    [Display(Name = "football", Description = "Football")]
    Football,

    [Display(Name = "table-tennis", Description = "Table Tennis")]
    TableTennis

}

我有一个检索属性的方法。我的问题是如何将这些值绑定到组合框,组合框应该显示每个项目的描述。

对我来说,找到一种方法来遍历枚举并创建某种列表就足够了,但我不知道该怎么做。

4

2 回答 2

3

尝试使用

Enum.GetNames(typeof(SportName)) // returns string[]

或者

Enum.GetValues(typeof(SportName)) // returns int[]
于 2013-03-21T21:03:28.653 回答
1

这是来自我的EnumComboBox类​​,它继承自ComboBox

public Type EnumType { get; private set; }
public void SetEnum<T>(T defaultValue) where T : struct, IConvertible
{
    SetEnum(typeof(T));
    this.Text = (defaultValue as Enum).GetLabel();
}
public void SetEnum<T>() where T : struct, IConvertible
{
    SetEnum(typeof(T));
}
private void SetEnum(Type type)
{
    if (type.IsEnum)
    {
        EnumType = type;
        ValueMember = "Value";
        DisplayMember = "Display";
        var data = Enum.GetValues(EnumType).Cast<Enum>().Select(x => new
        {
            Display = x.GetLabel(), // GetLabel is a function to get the text-to-display for the enum
            Value = x,
        }).ToList();
        DataSource = data;
        this.Text = data.First().Display;
    }
    else
    {
        EnumType = null;
    }
}

public T EnumValue<T>() where T : struct, IConvertible
{
    if (typeof (T) != EnumType) throw new InvalidCastException("Can't convert value from " + EnumType.Name + " to " + typeof (T).Name);

    return (T)this.SelectedValue;
}

您不能在设计时设置它,但是当您初始化框时,您可以调用

myCombo.SetEnum<SportName>();

然后再获得价值

var sport = myCombo.EnumValue<SportName>();
于 2013-03-21T21:06:51.997 回答