2013-07-11 52 views
2

由於在編寫WPF應用程序時集合可供選擇的所有可能性,我不確定在存儲數據時要使用哪些集合。如果我使用ObservableCollection s和實施INotifyPropertyChanged,似乎所有東西都可以工作。如何確定在WPF中使用哪個集合

在我的View Models中使用集合時,我應該問自己什麼是一些問題?特別是,我應該何時使用這些集合? :

ObservableCollection

List<ClassA>

IList

CollectionView

ICollectionView

IEnumerable

以及您可能想要列出的其他人。

並通過它IEnumerable,但我怎麼知道哪個是正確的集合?這是否都基於我使用的控件?

回答

9

使用ObservableCollection當您希望在添加或刪除項目時更新GUI。 ObservableCollection是自動執行ICollectionChanged的列表。

否則使用List

使用CollectionView當你想應用排序,分組,過濾,也就是更復雜的操作。

2

如果您希望將集合作爲Source的控件在添加/移動/移除/替換集合中的項目時自動更新,那麼您必須使用ObservableCollection並將控件的ItemsSource(例如)綁定到該集合。

如果您要使用List<T>,則綁定控件將不會收到任何通知以進行更新。

這與更新每個項目的內容不同。無論(我相信)只有在項目對象實現INotifyPropertyChanged時,您將使用哪個集合類型才能更新每個項目的內容。

+1

如果提高財產名單上的改變,它會得到更新它包含了類型的特性 - 除了對Telerik的:RadGridView .. :)我使用列表和IEnumerable所有的時間作爲輕量級+少嘮叨 –

+0

@Denis會不會強迫更新整個列表?如果你有一個短名單,並且你不打算使用故事板動畫添加項目,我想這很好。 –

+0

@denismorozov就這麼發生我正在使用'telerik:RadGridView'所以感謝信息。你的意思除了在我需要使用'ObservableCollection'爲RadGridView?繼續討論,從你的意見中學習。 – Kcvin

2

我對我的大部分集合都使用IEnumerable。

您的方式工作需要,即:

  • IEnumerable的:它是最輕的重量,並提供最小的功能,但非常適合大多數情況。

  • 名單:包括所有的IEnumerable的功能,並增加功能,如添加,刪除編輯採集的能力,等等​​。

  • 的ObservableCollection:包括以上,並已INotifyPropertyChanged的已經實施。這使它非常適合更新添加和刪除項目的集合的UI。

+0

因此,我不需要在我的ObservableCollections中調用NotifyPropertyChanged,對吧?而IEnumerable沒有添加或刪除? – Kcvin

+1

不完全。 INotifyPropertyChanged在內實現ObservableCollections,即在編輯/刪除或刪除項目的情況下 - 將自動調用NotifyPropertyChanged。但如果你將切換ObservableCollection refference,它不會被調用。您也應該在該級別實現INotifyPropertyChanged。 – Jviaches

相關問題