Bạn có thể sử dụng liên kết hai chiều trên thuộc tính SelectedItem của ComboBox. Khi thêm giá trị vào hộp kết hợp, hãy đảm bảo thêm các giá trị enum và không chỉ các chuỗi khớp với tên hiển thị của chúng.
comboBox.Items.Add(ConsoleColor.Red);
comboBox.Items.Add(ConsoleColor.Blue);
// ... etc
Bây giờ SelectedItem có thể được đặt hoặc nhận dưới dạng enum thay vì chuỗi.
EDIT
Nghe có vẻ như có thể đối tượng của bạn không làm tăng thông báo thay đổi sở hữu mà Windows Forms đòi hỏi để phát hiện rằng những thay đổi đối tượng cơ bản cần phải được làm mới trong giao diện người dùng. Here is an article về cách thực hiện điều đó.
EDIT 2
Đây là một mẫu mã. Tôi đã xác minh điều này hoạt động chính xác.
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 {};
}
Bạn đã thử chưa? – SLaks
Cái nào? Tôi đã thử bài viết nhưng nó không giải quyết được vấn đề khi tôi cập nhật DataObject.DataEnum, ComboBox không cập nhật. Nếu tôi phải làm điều đó bằng tay quá, thì những gì tốt là databinding. Tôi có thể tự làm tất cả bằng tay. –
Bạn có thể không tăng thông báo thay đổi thuộc tính? Windows Forms sẽ sử dụng sự kiện INotifyPropertyChanged hoặc DataEnumChanged để phát hiện các thay đổi đối tượng bên dưới của bạn. Bạn sẽ cần phải thực hiện một hoặc cái khác để Windows Forms ràng buộc để biết rằng một sự thay đổi đã xảy ra. – Josh