簡體   English   中英

將存儲在對象中的枚舉數據綁定到Winforms ComboBox中?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM