我创建了以下类来为一个人建模:
namespace DataBindingTest
{
public enum colorEnum
{
Red,
Green,
Yellow,
Blue,
}
class Person
{
private string _Name;
private int _Age;
private colorEnum _FavoriteColor;
private bool _HasAllergies;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
public int Age
{
get { return _Age; }
set { _Age = value; }
}
public colorEnum FavoriteColor
{
get { return _FavoriteColor; }
set { _FavoriteColor = value; }
}
public bool HasAllergies
{
get { return _HasAllergies; }
set { _HasAllergies = value; }
}
}
}
在我的主窗体上,我有一个将绑定到Person对象数组的组合框。当我从这个组合框中选择一个人时,我想显示他们的年龄(在NumericUpDown控件中),他们是否有过敏(作为复选框)和他们喜欢的颜色(在DropDownStyle设置为DropDownList的另一个组合框中)。为实现这一目标,我有:
到目前为止,一切都按预期工作。现在我想在comboBoxFavoriteColor中显示该人最喜欢的颜色(即BindingSource的FavoriteColor属性)。我已经将DropDownStyle设置为DropDownList,因为FavoriteColor是一个枚举。但是,我不清楚我应该如何绑定这个comboBox,以便1)包含FavoriteColor枚举值,2)当我从comboBoxPeople中选择一个人时,将相应的颜色设置为SelectedItem。谁能给我一个关于此的想法?非常感谢!
答案 0 :(得分:2)
你可以像汤姆建议的那样做,但至少有一种简单的方法可以做到这一点,而不必将Person.FavoriteColor
改为字符串。
向名为FavoriteColorString
的人员添加属性:
public class Person
{
[...]
public colorEnum FavoriteColor { get; set; }
public string FavoriteColorString
{
get { return FavoriteColor.ToString(); }
set { FavoriteColor = (colorEnum)Enum.Parse(typeof(colorEnum), value); }
}
}
重新编译,以便新属性显示在bindingsource中。
现在将comboBoxFavoriteColor.SelectedItem
绑定到FavoriteColorString
。
在运行时,就像汤姆所说的那样:
comboBoxFavoriteColor.DataSource = Enum.GetNames(typeof(colorEnum));
瞧!它应该按照你想要的方式工作。
当您持久保存设置对象时,只需不要保留FavoriteColorString属性。
答案 1 :(得分:1)
你需要按照这些方针做点什么:
string[] colors = Enum.GetNames(typeof(colorEnum));
this.comboBox1.DataSource = colors;
..为了方便起见,只需将喜爱的颜色存储为string
类型,而不是colorEnum