2009-12-16 132 views
2

在我正在处理的应用程序中,我需要维护当前已加载的项目列表,并在ListBox中显示每个项目的名称(好吧,多个ListBoxes,但这两者都不是这里或那里)。将绑定列表绑定到列表框的问题

class Project 
{ 
    public String Name; 

    // Etc. etc... 
} 

我有它包含了所有的加载项目的的BindingList对象,我将它绑定到我的列表框(ES)。

private BindingList<Project> project_list = new BindingList<Project>(); 
private ListBox project_listbox; 

private void setList() 
{ 
    project_listbox.DisplayMember = "Name"; 
    project_listbox.ValueMember = "Name"; 
    project_listbox.DataSource = project_list; 
} 

但是当我这样做,是被显示在project_listbox全部是一组项目的类名。我在这里错过了什么吗?关于将List绑定到ListBox的每个引用都使用了非常类似的设置。

+0

默认情况下,列表框将调用toString()在你的类显示值。你可以轻松实现public Override ToString()并返回Name作为字符串结果。 – 2009-12-16 21:13:33

+0

如果你想让一个属性成为ValueMember,那么这是一个糟糕的解决方案,尽管:)你仍然需要制作一个{get;私人设置}。否则,ValueMember将无法使用。 – CasperT 2009-12-16 21:21:25

回答

2

你需要做的属性可读:)

class Project 
{ 
    public string Name {get; private set;} 

    // Etc. etc... 
} 

现在,它应该工作。我只是测试它。

这应该工作以及:

public readonly string Name; 

正如我已经指出。把“只读”不起作用。我只是自己测试和验证它。

+1

+1,但忘记readonly领域。 DisplayMember必须是一个属性的名称。 – 2009-12-16 21:13:00

+0

谢谢。你是对的。我去测试它。 – CasperT 2009-12-16 21:19:16

+0

谢谢。这是有效的,但我不清楚为什么这在功能上与以前不同。只有当'set'是私人的时候,ValueMember属性才会起作用吗? – themarshal 2009-12-17 01:08:01