[英]Data binding an Enum stored in an object into a Winforms ComboBox?
谁知道怎么做?
我尝试了这个 ,但它只是填充了我已经做过的这个ComboBox。
我需要的是一种方法,只要我的对象上的枚举属性发生变化,就可以更新组合框:
DataObject.DataEnum
但每当我更改组合框中的选定项目时,也会更新上面的枚举。
是否有可能做到这一点?
通常我习惯这样做绑定:
this.TextBox.DataBindings.Add ( "Text", this.DataObject, "Name", false, DataSourceUpdateMode.OnPropertyChanged );
这很棒。
您可以在ComboBox的SelectedItem属性上使用双向绑定。 向组合框添加值时,请确保添加枚举值,而不仅仅是添加与其显示名称匹配的字符串。
comboBox.Items.Add(ConsoleColor.Red);
comboBox.Items.Add(ConsoleColor.Blue);
// ... etc
现在SelectedItem可以设置或获取为枚举而不是字符串。
编辑
听起来好像你的对象不会引发属性更改通知,Windows Forms需要检测到需要在UI中刷新对底层对象的更改。 这是一篇关于如何做到这一点的文章 。
编辑2
这是一个代码示例。 我验证这是正常的。
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 {};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.