je le fais comme ça, mais peut-être il existe une meilleure façon:
List<ListItem<MyEnum>> enumVals = new List<ListItem<MyEnum>>();
foreach(MyEnum m in Enum.GetValues (typeof(MyEnum))
{
enumVals.Add (new ListItem<MyEnum>(m, m.ToString());
}
myComboBox.DataSource = enumVals;
myComboBox.ValueMember = "Key";
myComboBox.DisplayMember = "Description";
Notez que ListItem<T>
est une classe personnalisée que j'ai créé, qui contient une propriété clé et une propriété Description.
Afin de garder votre propriété synchronisé avec la valeur sélectionnée de la zone de liste déroulante, vous devrez: - ajouter un DataBinding au combobox, de sorte que la SelectedValue du combobox est lié à votre propriété - assurez-vous que La classe qui contient la propriété, implémente INotifyPropertyChanged, de sorte que lorsque vous modifiez la propriété, la valeur sélectionnée de la liste déroulante est également modifiée.
myComboBox.DataBindings.Add ("SelectedValue", theBindingSource, "YourPropertyName");
et
public class TheClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private MyEnum _myField;
public MyEnum MyPropertyName
{
get { return _myField; }
set
{
if(_myField != value)
{
_myField = value;
if(PropertyChanged != null)
PropertyChanged ("MyPropertyName");
}
}
}
}
J'ai besoin la liste déroulante reste synchronisée avec la propriété EnumVal de la classe, c'est-à-dire si je change la valeur EnumVal, la liste déroulante reflète la modification, et viceversa, si je change la valeur de liste déroulante, la propriété EnumVal est également mise à jour. –