如何使用objectdatasource将枚举绑定到winform组合框

时间:2009-10-01 08:22:50

标签: c# winforms

我正在使用对象数据源将类绑定到Windows窗体:将简单属性绑定到文本框工作正常,但我需要将枚举属性绑定到组合框,例如:

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

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

如何使用绑定源完成此操作?我尝试过各种方式,但这些方法都没有。 感谢

2 个答案:

答案 0 :(得分:3)

我是这样做的,但也许有更好的方法:

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 :(得分:1)

我一直在寻找关于这个利基的优质博客。在雅虎搜索驱动我在这里,我刚刚找到了我正在寻找的这种令人满意的读数。我在网上找到了这个答案,希望它能帮助你开箱即用。 这很简单......

定义枚举,例如:

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