您可以在 ComboBox 的 SelectedItem 属性上使用双向绑定。向组合框添加值时,请务必添加枚举值,而不仅仅是与其显示名称匹配的字符串。
comboBox.Items.Add(ConsoleColor.Red);
comboBox.Items.Add(ConsoleColor.Blue);
// ... etc
现在可以将 SelectedItem 设置或获取为枚举而不是字符串。
编辑
听起来您的对象可能没有引发属性更改通知,Windows 窗体需要这些通知来检测对基础对象的更改需要在 UI 中刷新。 Here is an article 关于如何做到这一点。
编辑 2
这是一个代码示例。我验证了它可以正常工作。
public partial class Form1 : Form {
private Person p = new Person( );
public Form1( ) {
InitializeComponent( );
comboBox1.DataSource = Enum.GetValues( typeof( Gender ) );
textBox1.DataBindings.Add( "Text", p, "Name", false, DataSourceUpdateMode.OnPropertyChanged );
comboBox1.DataBindings.Add( "SelectedItem", p, "Gender", false, DataSourceUpdateMode.OnPropertyChanged );
label1.DataBindings.Add( "Text", p, "Name", false, DataSourceUpdateMode.Never );
label2.DataBindings.Add( "Text", p, "Gender", false, DataSourceUpdateMode.Never );
}
private void Form1_Load( object sender, EventArgs e ) {
// yeah, that's right i voted for him,
// go ahead and downvote me
p.Name = "John McCain";
p.Gender = Gender.Male;
}
private void Form1_Click( object sender, EventArgs e ) {
p.Name = "Sarah Palin";
p.Gender = Gender.Female;
}
}
public enum Gender {
Male,
Female
}
public class Person : INotifyPropertyChanged {
private string name;
private Gender gender;
public string Name
{
get { return name; }
set {
name = value;
PropertyChanged( this, new PropertyChangedEventArgs( "Name" ) );
}
}
public Gender Gender {
get { return gender; }
set {
gender = value;
PropertyChanged( this, new PropertyChangedEventArgs( "Gender" ) );
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate {};
}