[英]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.