Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用对象的字段设置Listbox DisplayMember和ValueMember?_C#_Winforms_Data Binding_Listbox - Fatal编程技术网

C# 如何使用对象的字段设置Listbox DisplayMember和ValueMember?

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 然而,现在我正

我使用了一些DTO,其设计如下:

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”publicprojectdetails=newprojectdetails()所以这会使它成为一个字段,不是吗?可能是个愚蠢的问题,我还是C#的新手。我会和编写代码的人谈谈,看看我应该如何处理。此外,还可以使用实际的代码片段编辑问题。您可以向Project类添加两个属性,用于操作每个项目实例的ProjectPrimitives内部列表,以返回需要用于该值的值/DisplayMember@McAdam331更新了帖子。