2013-10-14 124 views
0

所以我有一個List<T>,我綁定我的ComboBoxBindingSource。工作正常,沒問題。現在我需要添加一個項目到我的ComboBox列表中不可用(並且我無法修改列表的內容)。下面的方案出現在我的腦海裏:將組合框綁定到兩個源

  1. 創建一個原始列表的副本,並在綁定之前再添加一個項目。
  2. 通過LINQ創建兩個列表的聯合(第二個只有一個項目),然後讓我的BindingSource監視聚合列表。
  3. 手動添加項目到組合框,然後監視列表中的更改。

現在我不想去第三個選項,失去約束優勢。第一個選項不起作用,因爲新創建的列表未鏈接到原始列表,因此不會更新。通過LINQ合併兩個列表也會創建一個獨立的列表,我猜。

所以我在這裏尋找的是我所說的AggregateBindingSource,它會將一個或多個List<T> s作爲它的DataSource並自動更新我的ComboBox。

還是有人有更好的主意嗎?

回答

1

我會在自己的類(ViewModel)中創建一個新List,它由List +單個項目組成。 並將此新列表綁定到您的ComboBox。

  1. 如果您正在使用的引用工作,更新視圖模型裏面的名單將在你的其他名單+項目自動更新條目。

  2. 如果您不使用引用,則必須更新List + Item。你可以在ViewModel中使用更新函數。但是,即使你只使用例如整數我會把它的對象裏面,所以你可以使用的參考,然後你可以再次使用步驟1

所以如果你使用的第一個您在文章中描述的兩個步驟,並且要注意參考,創建新列表沒有問題。

+0

從現有列表(例如使用構造函數)創建新列表並不以任何方式將新列表鏈接到舊列表。它僅創建原始列表的淺拷貝(即使使用引用)。原始列表中的任何更改都不會影響新列表的內容。 – dotNET

+0

ofc他們沒有真正聯繫,但如果你在兩個列表中存儲相同的引用,那麼他們訪問相同的元素。 因此,如果您刪除或插入一個列表中,您必須更新。但是如果你只是改變元素的一些成員,他們將在兩個列表中更新。 –

+0

正確,但你只是建議案件號。 3我上面發佈了,我想避免,因爲這個列表將要經歷很多插入/刪除操作,所以綁定真的很方便。 – dotNET