Как связать enum с комбинированным списком winform, используя objectdatasource - PullRequest
1 голос
/ 01 октября 2009

Я связываю класс с формой Windows, используя источник данных объекта: связывание простых свойств с текстовыми полями работает нормально, но мне нужно также связать свойства перечисления с комбинированными списками, такими как:

    public enum MyEnum
    {
        Val1,
        Val2,
        Val3
    }
    private MyEnum enumVal;

    public MyEnum EnumVal
    {
        get { return enumVal; }
        set { enumVal = value; }
    }

Как сделать это, используя источник привязки? Я пробовал по-разному, но ни одна из этих работ. Спасибо

Ответы [ 2 ]

3 голосов
/ 01 октября 2009

Я делаю это так, но, возможно, существует лучший способ:

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";

Обратите внимание, что ListItem<T> - это созданный мной пользовательский класс, который содержит свойство Key и свойство Description.

Чтобы синхронизировать ваше свойство с выбранным значением в выпадающем списке, вам необходимо: - добавьте привязку данных в комбинированный список, чтобы значение SelectedValue комбинированного списка было привязано к вашему свойству - убедитесь, что класс, содержащий свойство, реализует INotifyPropertyChanged, чтобы при изменении свойства выбранное значение комбинированного списка также изменялось.

myComboBox.DataBindings.Add ("SelectedValue", theBindingSource, "YourPropertyName");

и

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");
         }
      }
   }
}
1 голос
/ 25 марта 2011

Я искал качественные блоги об этой нише. Поиск в Yahoo привел меня сюда, я только нашел такие удовлетворительные показания, которые искал. Я нашел этот ответ в сети, надеюсь, он поможет вам из коробки. Это довольно просто ...

Определите перечисление, например:

public enum MyEnum{
  ItemOne,
  ItemTwo,
}

В форме установите для источника данных в выпадающем списке значения перечисления, например:

myCombo.DataSource = System.Enum.GetValues(typeof(MyEnum));

Чтобы комбо автоматически выбирал значение на основе связанного объекта, установите привязку данных комбо, например:

class MyObject{
  private MyEnum myEnumProperty;
  public MyEnum MyEnumProperty{get {return myEnumProperty;}}
}
MyObject myObj = new MyObject();
myCombo.DataBindings.Add(new Binding("SelectedIndex", myObject, "MyEnumProperty");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...