如何使用对象的字段设置列表框DisplayMember和ValueMember?

时间:2014-12-22 15:09:31

标签: c# winforms data-binding listbox

我有一些我正在使用的DTO,其设计如下:

ProjectPrimitives
   string Name
   int ProjectId

ProjectDetails : ProjectPrimitives
   string ReportName
   string Description
   // Others

Project
   ProjectDetails details
   List<Contact> contacts
   // Some more

在我的应用程序中,我有一个列表框,我想在其中显示Project个对象。以前,我通过执行以下操作显示ProjectPrimitives

projectListBox.DisplayMember = "Name";
projectListBox.ValueMember = "ProjectId";
projectListBox.DataSource = projects; // This is a List<ProjectPrimitives>

但是,现在我正在显示Project个对象,我无法让它工作。我试过了:

projectListBox.DisplayMember = "Details.Name";
projectListBox.ValueMember = "Details.ProjectId";
projectListBox.DataSource = projects; // This is now a List<Project>

但那没用。它只是显示对象(MyProject.DTOs.Project)。如何显示名称?

修改

ProjectPrimitives类:

public class ProjectPrimitives
{
   public int ProjectId {get; set;}
   public string Name {get; set;}
}

项目类:

public class Project
{
   public ProjectDetails details = new ProjectDetails();
}

1 个答案:

答案 0 :(得分:2)

它们必须是属性,而不是字段:

Public string Name {get; set; }
Public int ProjectId { get; set; }

我不认为DisplayMember属性可以处理“子属性”,因此您必须在Project类中创建这些属性:

public class Project {
  public ProjectDetails details = new ProjectDetails();

  public string Name {
    get { return details.Name; }
  }

  public int ProjectId {
    get { return details.ProjectId; }
 }
}

WinForms与WPF没有相同的数据绑定功能。这可能是其中一个限制。