2011-01-06 88 views
0

所以我有一個有可觀察集合的對象。我綁定到這個集合的大多數地方我只希望用戶選擇一個項目。但是在一個地方,我希望組合框包含所有項目選項。WPF組合框,在綁定到Observable集合時添加所有選項項

只是用xaml轉換器來做到這一點嗎?

看來在視圖模型中這樣做會是一個好主意,但它實際上是一個很大的依賴對象goop,它基本上爲一個更改事件深入兩個對象的集合進行了連接,而xaml轉換器只是作品。

但我總是覺得xaml轉換器應該是通用的並且可重用的,在這種情況下,xaml轉換器將更多地是一次性的。

當然,第三種選擇是在包含標準可觀察集合的對象中爲UI創建一個關閉列表。但是,這似乎是以一種令我不舒服的方式混合邏輯和表達。

回答

4

看看CompositeCollection。它可以讓您將多個集合連接成一個集合 - 類似LINQ Concat的XAML等價物。它實現INotifyCollectionChanged,所以它應該能夠對更改作出反應,如果它的某些內部集合是ObservableCollections。

CompositeCollection還允許您添加單個元素,因此甚至不需要將「所有項目」包裝在它自己的集合中。 (相反,您必須將集合包裝到CollectionContainer中,請參見CompositeCollection文檔頁面上的示例。)

+0

這很好,儘管它仍然需要一個依賴項屬性來滿足我需要做的事情,但我比其他一些選項更喜歡它。 – 2011-01-06 23:16:15

1

我有類似的需求,最終使用了本文中討論的解決方案:How To Select Null/None in a ComboBox/ListBox/ListView

您可以將第98行的「(無)」字符串替換爲「全部」或類似內容。然後,只需在ViewModel中添加邏輯,以適當的方式將空值視爲「全部」。如果你在多個地方需要這個代碼,那麼有一個額外的類可能會讓你感覺有些惱火,但它會使代碼更加清潔。