我正在使用对象数据源将类绑定到Windows窗体:将简单属性绑定到文本框工作正常,但我需要将枚举属性绑定到组合框,例如:
public enum MyEnum
{
Val1,
Val2,
Val3
}
private MyEnum enumVal;
public MyEnum EnumVal
{
get { return enumVal; }
set { enumVal = value; }
}
如何使用绑定源完成此操作?我尝试过各种方式,但这些方法都没有。 感谢
答案 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");