繁体   English   中英

如何将值和文本绑定到属性网格中存在的下拉列表(组合框)?

[英]How to bind value and text to a drop down (combo box) which is present in a property grid?

我将如何绑定一个自定义 object,它有值和文本绑定到属性网格中的下拉列表?

例如,我有一个自定义列表,如下所示:

List < Employee > _employeeList;
public class Employee {
    int employeeId;
    string employeeName;
}

我可以将字符串列表绑定到属性网格中的下拉列表,但不能绑定自定义 object 列表。

通常,您将组合的 DataSource 设置为列表,将 DisplayMember 设置为要显示的属性名称字符串,将 ValueMember 设置为要用作值的属性名称字符串(调用 selectedValue 时):

public class Person{
  public string Name { get; set; }
  public int Id { get; set; }
}
var peeps = new List<Person>(){
  new Person(){ Name="John",Id=1 },
  new Person(){ Name="Jane",Id=2 }
};
combo.DataSource = peeps;
combo.DisplayMember = "Name";
combo.ValueMember = "Id";

在组合中选择“Jane”,并且(int)combo.SelectedValue将为 2

如果不设置 display 和 value 成员,组合将只对列表中的每个项目调用 ToString 并将其用作显示文本,并将整个 object 作为值。 如果没有重写 ToString,则默认只是返回类型名称。 因此,您可能会看到一个充满“YourNamespace.Person”或同等内容的列表

您应该使用公共属性,而不是私有字段:

public class Employee
{
  public int EmployeeId {get; set; }
  public string EmployeeName {get; set; }
}
  • 在 class 之外使用公共。
  • 至少有一个 getter 的属性适用于 OO 设计。

使用公共属性可能会解决使用私有字段引起的问题,因为绑定只使用公共属性。

您还应该实现 ToString(),例如:

public override string ToString()
{
  return EmployeeName;
}

这让控件显示对象的字符串表示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM