如何将自定义对象列表绑定到ComboBox?

6
我该如何将自定义对象列表绑定到组合框?这是我目前所拥有的内容:
            this.classCmbo.DataSource = _viewModel.Coarses;
            this.classCmbo.DisplayMember = "Name";
            this.classCmbo.ValueMember = "Id";

我希望“名称”能够显示,但我希望“Id”成为与所选内容相关联的值。在winforms中该如何实现呢?
以下是对象的大致代码:
 public class Coarse
    {
        public virtual int Id { get; private set; }
        public virtual string Name { get;  set; }
    }

Thanks...

3个回答

11

您可以尝试像这样……

public class Country
{
    public string Name { get; set; }
    public IList<City> Cities { get; set; }
    public Country(string _name)
    {
        Cities = new List<City>();
        Name = _name;
    }
}

List<Country> countries = new List<Country> { new Country("UK"), 
                                     new Country("Australia"), 
                                     new Country("France") };

bindingSource1.DataSource = countries;

comboBox1.DataSource = bindingSource1.DataSource;

comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Name";

我希望它能帮助你...


2

不确定你的_viewModel.Coarses是什么,但可以试试这个?

this.classCmbo.DataSource = _viewModel.Coarses;
this.classCmbo.DisplayMember = _viewModel.Coarses.Name;
this.classCmbo.ValueMember = _viewModel.Coarses.Id;

或者只是
this.classCmbo.DataSource = _viewModel.Coarses;
this.classCmbo.DisplayMember = Coarses.Name;
this.classCmbo.ValueMember = Coarses.Id;

谢谢,但是_viewModel.Coarse是Coarse的集合,即IList<Coarse>。因此_viewModel.Coarses.Name没有意义,“Coarses”是“Coarse”类型的集合。 - Nick
你尝试过只使用Coarses.Name或者classCmbo.DataSource.Name吗?很抱歉我没有遇到过这个问题,但是我只在WPF中使用过它,不确定如何转换回WinForms :( - John

1

谢谢。我应该提到这是一个 WinForm 应用程序,而不是 WPF。 - Nick
哦,我明白了,我错过了那个,抱歉 D:在winforms中,ComboBoxes只是使用对象集合作为其项目。它们可以是任何东西。 ComboBox中显示的文本是其ToString()返回的任何内容。我会编写一个包含您需要存储为属性的所有信息的类(或使用您已经编写的类),并包括一个用于在ComboBox中显示所需内容的Text属性。然后,只需覆盖ToString()方法以返回Text属性的内容即可。然后,您可以使用myComboBox.Items.Add(myCustomObject)添加它。 - Nacimota

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接