将绑定列表绑定到列表框的问题
在我正在处理的应用程序中,我需要维护当前已加载的项目列表,并在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的每个引用都使用了非常类似的设置。
你需要做的属性可读:)
class Project
{
public string Name {get; private set;}
// Etc. etc...
}
现在,它应该工作。我只是测试它。
这应该工作以及:
public readonly string Name;
正如我已经指出。把“只读”不起作用。我只是自己测试和验证它。
+1,但忘记readonly领域。 DisplayMember必须是一个属性的名称。 – 2009-12-16 21:13:00
谢谢。你是对的。我去测试它。 – CasperT 2009-12-16 21:19:16
谢谢。这是有效的,但我不清楚为什么这在功能上与以前不同。只有当'set'是私人的时候,ValueMember属性才会起作用吗? – themarshal 2009-12-17 01:08:01
顺便说一句,请注意,如果你想搜索或排序的BindingList,你将需要实现它,并添加此功能
默认情况下,列表框将调用toString()在你的类显示值。你可以轻松实现public Override ToString()并返回Name作为字符串结果。 – 2009-12-16 21:13:33
如果你想让一个属性成为ValueMember,那么这是一个糟糕的解决方案,尽管:)你仍然需要制作一个{get;私人设置}。否则,ValueMember将无法使用。 – CasperT 2009-12-16 21:21:25