我想決定是否要將所有IEnumerable
集合切換到Observable集合。我無法找到一個很好的解釋。可理解術語中可觀察收藏的優點和缺點是什麼?通過IEnumerable使用Observable集合的優點和缺點
回答
您可能會決定將IEnumerable<Something>
作爲某種屬性的類型,但使用ObservableCollection<Something>
作爲實際值。
如果你有這樣的特性:
private IEnumerable<Something> collectionOfSomething;
public IEnumerable<Something> CollectionOfSomething
{
get { return collectionOfSomething; }
set
{
collectionOfSomething = value;
NotifyPropertyChanged("CollectionOfSomething");
}
}
現在,你可以簡單地分配給該屬性像
someViewModelObject.CollectionOfSomething = new ObservableCollection<Something>();
當您分配或綁定到一個集合屬性(例如ItemsControl.ItemsSource
),目標對象通常會檢查實際屬性值是否實現INotifyCollectionChanged
(什麼ObservableCollection
)並附加CollectionChanged
處理程序以獲取有關源集合中更改的通知。
如果您以後決定採用其他更智能的INotifyCollectionChanged
實現,則不需要更改所有屬性類型。只是一些替代像觀察集合的這
someViewModelObject.CollectionOfSomething = new MyVerySmartCollection<Something>();
+1用於顯示NotifyPropertyChanged實現:) – 2013-02-12 17:12:24
嗯,這實際上真的很有幫助..我可能會攪亂它一段時間。它可以解決我使用IEnumerable時遇到的問題。謝謝!\ – JLott 2013-02-12 17:15:18
我可能會這樣構思你的問題的答案:當你的收藏改變內容時,你的應用程序是否需要通知?如果是這樣,那麼這樣的改變可能是有保證的。我的理解是Observable集合的首要特徵是它們在集合更改時提供通知機制,而IEnumerable僅提供單迭代枚舉器。
我希望有幫助。
整點的分配(S)是他們實現以下接口
INotifyCollectionChanged, INotifyPropertyChanged
這使得它非常容易提醒UI /的視圖模型相應地更改和更新。如果您沒有使用ObservableCollection,則需要手動實施對集合/屬性的更新。
使用ObservableCollection的最大好處是自動實現INotifyCollectionChanged和INotifyPropertyChanged,這使得數據綁定更簡單。我會說,當你第一次設置你的數據綁定時最好使用ObservableCollection。
但是現在你已經編碼了(和數據綁定?)一堆IEnumerables,在這一點上沒有任何節省。
另一個要考慮的是,ObservableCollection<T>
是IEnumerable
(從Collection<T>
繼承)。由於IEnumerable
是一個接口,它是由很多類實現的List<T>
就是這樣一個類 - ObservableCollection<T>
是另一個類。
我喜歡@Clemens示例,它在代碼中顯示了就數據綁定而言的差異。因此,也許所有未來的項目增加可以從'ObservableCollecion
受益'我還沒有限制他們呢...我有問題,因爲我不得不使用另一個視圖的值,我在工作中看不到那些數據。我聽說將其更改爲可觀察的集合可以修復它,但我仍然不完全確定。這是導致此問題的我的上一個問題的鏈接... http://stackoverflow.com/questions/14836678/連接數據在二級用於在視圖/ 14836935#comment20791174_14836935 – JLott 2013-02-12 17:13:40
@JLott編輯新信息的答案 – EtherDragon 2013-02-12 17:21:54
- 1. 組合C#和C的優點/缺點
- 2. 使用java rmi的優點和缺點
- 3. 使用ReactJS的優點和缺點
- 4. 使用startManagingCursor()的優點和缺點
- 5. 推送通知優點和缺點
- 6. 使用≠like!=優點/缺點
- 7. Three20的優點和缺點
- 8. smartGWT的缺點和優點
- 9. N2CMS的優點和缺點
- 10. Axis2優於WCF的優點和缺點
- 11. 優點和缺點mapquest android
- 12. gwt + grail ..優點和缺點
- 13. AUTONOMOUS_TRANSACTION:優點和缺點
- 14. Memcached - 優點和缺點
- 15. Oracle Traces優點和缺點
- 16. Glassfish - 優點和缺點
- 17. MDI優點和缺點
- 18. WCF - 優點和缺點
- 19. 通過UITableView嵌入式UITableViewController有什麼優點和缺點?
- 20. 在Symfony中使用存儲過程 - 優點和缺點
- 21. 使用Arrays.asList的優缺點
- 22. 使用MessageFormat的優缺點
- 23. 使用SetProcessWorkingSetSize的優缺點
- 24. 使用log4j的優缺點
- 25. 使用一個大集合的缺點
- 26. 使用UdpClient優於Socket的優點和缺點
- 27. 領先的HTML和CSS蒙皮組合的優點和缺點
- 28. 使用socketio心跳的優點/缺點
- 29. 使用指針的優點/缺點
- 30. Haxe和Kivy的優點和缺點
作爲次要方面的說明:Observables也實現IEnumerable。它們還具有額外的好處,它們可以設置爲由UI進行監視。 – sircodesalot 2013-02-12 17:53:46
已關閉?尊重地不贊成那個投票。正如常見問題解答中所述,這完全在「我希望其他人向我解釋」的範圍內,並確定了OP要求解釋的具體內容。我認爲有幾個很好的,詳細的答案表明「不具有建設性」的封閉是不恰當的。投票重新開放。 – 2013-02-12 18:38:13
謝謝@David W.我自己有點困惑,爲什麼它被關閉.. – JLott 2013-02-12 18:39:19