繁体   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