C# 如何使用对象的字段设置Listbox DisplayMember和ValueMember?
我使用了一些DTO,其设计如下:C# 如何使用对象的字段设置Listbox DisplayMember和ValueMember?,c#,winforms,data-binding,listbox,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 然而,现在我正
ProjectPrimitives
string Name
int ProjectId
ProjectDetails : ProjectPrimitives
string ReportName
string Description
// Others
Project
ProjectDetails details
List<Contact> contacts
// Some more
然而,现在我正在显示Project
对象,我无法让它工作。我试过:
projectListBox.DisplayMember = "Details.Name";
projectListBox.ValueMember = "Details.ProjectId";
projectListBox.DataSource = projects; // This is now a List<Project>
项目类别:
public class Project
{
public ProjectDetails details = new ProjectDetails();
}
public class Project {
public ProjectDetails details = new ProjectDetails();
public string Name {
get { return details.Name; }
}
public int ProjectId {
get { return details.ProjectId; }
}
}
它们必须是属性,而不是字段:
Public string Name {get; set; }
Public int ProjectId { get; set; }
我认为DisplayMember属性无法处理“子属性”,因此您必须在项目类中创建这些属性:
public class Project
{
public ProjectDetails details = new ProjectDetails();
}
public class Project {
public ProjectDetails details = new ProjectDetails();
public string Name {
get { return details.Name; }
}
public int ProjectId {
get { return details.ProjectId; }
}
}
WinForms没有与WPF相同的数据绑定功能。这可能是其中一个限制。Hm。但这些都是属性。第一个不应该在其他情况下工作,对吧?@McAdam331我不知道。很明显,您没有发布真正的代码,但它们看起来像您编写它们的方式字段。否则,是,
projectListBox.DisplayMember=“Name”我想你是对的。在第一个示例中,Name和ProjectId是属性,但在最后一个示例中,它只是publicprojectdetails=newprojectdetails()代码>所以这会使它成为一个字段,不是吗?可能是个愚蠢的问题,我还是C#的新手。我会和编写代码的人谈谈,看看我应该如何处理。此外,还可以使用实际的代码片段编辑问题。您可以向Project类添加两个属性,用于操作每个项目实例的ProjectPrimitives内部列表,以返回需要用于该值的值/DisplayMember@McAdam331更新了帖子。