Vous pouvez utiliser une liaison bidirectionnelle sur la propriété SelectedItem de la zone de liste déroulante. Lorsque vous ajoutez des valeurs à la zone de liste déroulante, assurez-vous d'ajouter les valeurs enum et pas seulement les chaînes qui correspondent à leur nom d'affichage.
comboBox.Items.Add(ConsoleColor.Red);
comboBox.Items.Add(ConsoleColor.Blue);
// ... etc
Maintenant, SelectedItem peut être défini ou obtenir enum au lieu d'une chaîne.
EDIT
Il semble que peut-être votre objet ne soulève pas la propriété des notifications de modification qui Windows Forms afin de détecter que des modifications à l'objet sous-jacent doivent être rafraîchi dans l'interface utilisateur. Here is an article sur la façon de le faire.
EDIT 2
Voici un exemple de code. J'ai vérifié que cela fonctionne correctement.
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 {};
}
L'avez-vous essayé? – SLaks
Lequel? J'ai essayé l'article mais cela ne résout pas le problème quand je mets à jour le DataObject.DataEnum, le ComboBox ne met pas à jour. Si je dois le faire manuellement aussi, alors à quoi sert la liaison de données. Je pourrais tout faire moi-même à la main. –
Etes-vous peut-être ne pas augmenter une notification de modification de propriété? Windows Forms utilisera INotifyPropertyChanged ou un événement DataEnumChanged afin de détecter les modifications apportées à votre objet sous-jacent. Vous devez effectuer l'une ou l'autre pour que la liaison Windows Forms sache qu'une modification s'est produite. – Josh