2009-12-16 189 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