我有一些我正在使用的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();
}
答案 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没有相同的数据绑定功能。这可能是其中一个限制。