2010-06-30 104 views
2

我爲小說道歉,但我想盡可能多地解釋到目前爲止所做的。如何從Observable Collection中移除項目

在我目前的項目中,我有一個使用服務的應用程序,它提供了一個集合<List>。由於我在應用程序中如何使用這些數據,我不得不將這些數據轉換爲可觀察的集合。這樣做是爲了在數據被選擇並移動到應用程序UI時使用INotifyPropertyChanged和INotifyCollectionChanged刷新更新。

我現在面臨的挑戰是我有一個列表框綁定到列表框中的可觀察集合我有一個數據模板呈現集合的項目。此數據模板包含一個按鈕,該按鈕需要允許用戶單擊每個項目的按鈕才能將其從集合中刪除。 這是一個用於存儲從gridview中選擇的名稱的列表框。一旦用戶從網格視圖中選擇了名稱,它們就會被存儲(在可觀察集合中作爲隊列),並在用戶界面中顯示出所有選定名稱的列表框控件。我需要爲用戶提供以選擇的任何順序刪除這些名稱的功能。

從我一直在閱讀沒有辦法枚舉/索引可觀察集合。對於這種情況,您應該使用List或Array。但是,爲了使項目在列表視圖中刷新,他們需要位於Observable集合中。 從我讀過的事情看來,當事件觸發時,我需要將可觀察集合轉換爲數組,然後評估數組以確定索引,然後相應地刪除記錄?

我想我可能是基於此,因爲它好像我在過度工程這個問題?上述情況似乎並不正確,因爲我倒下了,好像我正在做很多轉換和從集合到刪除記錄? 當集合作爲列表框中的項目控件呈現出來時,是否有人知道從集合中刪除記錄(以任何選定的順序)的有效方法? 我已經成功移除使用RemoveAt()添加到集合中的最後一條記錄,但是我沒有在隨機移除記錄方面取得任何成功。

有感:這個問題部分可能與這樣的事實,我有DataTemplate中(控制項)中插入一個按鈕,因此之前的事件上的按鈕發射實際上沒有被選中的項目事件? 對不起,我在這個問題上花了好幾個小時,並取得了一些小進展。任何提示或想法將不勝感激!

+3

這個問題太漫長了。如果你能削減一個實際的問題,你會做到這一點。而且僅供參考,我不知道你在哪裏閱讀,你不能索引或枚舉ObservableCollection。當然你可以,它具有所有'ICollection '方法(IndexOf,Item索引器等)。 – 2010-06-30 02:28:50

+0

感謝亞當,對於長篇小說對不起。我試圖給出一個過於描述性的問題,並且出現了更簡單的混淆。再次感謝ICollection的提示 – rlcrews 2010-06-30 14:53:16

回答

5

ObservableCollection<T>繼承自Collection<T>它實現了IList<T>,所以你可以肯定地索引和枚舉它。它有一個Remove方法,該方法使對象刪除並刪除集合中的第一個匹配項,並刪除索引並刪除該索引項的方法。

基於你的事後,聽起來像你有一個WPF ListBox和一個ItemTemplate創建一個按鈕。 ListBox會將每個實例化模板的DataContext設置爲綁定到列表中的項目,因此您可以從Button上的DataContext屬性或通過使用綁定來獲取對創建Button的項目的引用。

+0

謝謝Quarermeister。經過一些額外的研究後,我回去重新模板並從模板中移除按鈕。這使我可以從控件中使用SelectedItem,並將按鈕移動到列表下面。雖然在視覺上有點不同。它沒有問題。謝謝你的提示。 – rlcrews 2010-06-30 14:55:30

相關問題