c# 组合框绑定到对象列表

Posted

技术标签:

【中文标题】c# 组合框绑定到对象列表【英文标题】:c# combobox binding to list of objects 【发布时间】:2011-04-15 15:54:41 【问题描述】:

是否可以将ComboBox 绑定到对象列表,但让 selectedvalue 属性指向对象,而不是对象的属性?

我之所以这么问,是因为我们有一些业务对象引用了其他对象 - 例如“年份”对象。那个年份对象可能需要换成另一个年份对象。


我能想出的唯一解决方案是让另一个类具有单个属性,在这种情况下指向一个年份对象。然后将组合框绑定到这些列表,并将显示和值成员都设置为单个属性。

但是为我们的任何“查找”这样做似乎有点痛苦??

【问题讨论】:

【参考方案1】:

您可以使用DataSource 属性将组合框绑定到任何值列表。或者实际上:

实现 IList 接口的对象,例如 DataSet 或 Array。默认为空。

然后您使用ValueMember 来控制您从SelectedValue 获得的内容。将其设置为 null as jmservera writes 可以让您获得 DataSource 中的对象。

【讨论】:

【参考方案2】:

如果将 ValueMember 设置为 null,则所选值将始终是对象,而不是属性:


    public class TestObject
    
        public string Name  get; set; 
        public int Value  get; set; 
    
    public partial class Form1 : Form
    
        private System.Windows.Forms.ComboBox comboBox1;

        public Form1()
        
            this.comboBox1 = new System.Windows.Forms.ComboBox();
            this.SuspendLayout();
            // 
            // comboBox1
            // 
            this.comboBox1.FormattingEnabled = true;
            this.comboBox1.Location = new System.Drawing.Point(23, 13);
            this.comboBox1.Name = "comboBox1";
            this.comboBox1.Size = new System.Drawing.Size(121, 21);
            this.comboBox1.TabIndex = 0;
            this.comboBox1.SelectedValueChanged += new System.EventHandler(this.comboBox1_SelectedValueChanged);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(284, 262);
            this.Controls.Add(this.comboBox1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);

            BindingList<TestObject> objects = new BindingList<TestObject>();
            for (int i = 0; i < 10; i++)
            
                objects.Add(new TestObject()  Name = "Object " + i.ToString(), Value = i );
            
            comboBox1.ValueMember = null;
            comboBox1.DisplayMember = "Name";
            comboBox1.DataSource = objects;
        

        private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
        
            if (comboBox1.SelectedValue != null)
            
                TestObject current = (TestObject)comboBox1.SelectedValue;
                MessageBox.Show(current.Value.ToString());
            
        
    

【讨论】:

如果我使用这种方法,我无法以编程方式设置 SelectedValue,我必须使用SelectedItem

以上是关于c# 组合框绑定到对象列表的主要内容,如果未能解决你的问题,请参考以下文章

如何将列表绑定到组合框?

QML - 无法将组合框模型绑定到变体列表项

使用查找组合框 c# 绑定 Datagridview 多列排序

我们如何将日期字段绑定到具有 2 列的“值列表”组合框?

在 WPF / C# 中选择绑定项目后维护组合框文本

WPF 数据绑定组合框到列表<string>