2012-03-02 46 views
13

我問在MSDN論壇以及這個問題... http://social.msdn.microsoft.com/Forums/en/wpf/thread/4493988a-9bd8-48fe-aff0-348502136a80何不的BindingList在WPF

我需要知道,爲什麼微軟認爲,BindingList不正確支持WPF ...

這是什麼不適用於WPF中的BindingList?我覺得它很有用,因爲它是。到目前爲止,我個人還沒有發現BindingList任何慢或更多的內存負載。

加WPF ItemsControlsItemsTemplatesStylesHierarchies工大與BindingList太遲了。他們同樣可觀察。

作爲一個鐵桿WPF開發人員自己和ObservableCollection風扇,我的信心是越來越被被-還有全熟,那BindingList ....

我爲什麼要使用ObservableCollection過的BindingList動搖? (保持預留INotifyPropertyChanged的其中兩個必須實現的項目屬性更改)

+0

http://stackoverflow.com/questions/4284663/difference-between-observablecollection-and-bindinglist – 2012-03-02 11:41:52

+2

@Leom的可能的複製,該線程也犯規回答的問題比如'BindingList'有什麼問題? – 2012-03-02 11:46:23

+2

ObservableCollection已經通知何時添加或刪除項目。您不必實現INotifyPropertyChanged。 – dcarneiro 2012-03-02 11:51:26

回答

16

這可能會感興趣:

http://www.themissingdocs.net/wordpress/?p=465

最重要的段落:

但實現不結垢,它很慢,它與更大的名單表現相當。如果您的元素類型支持INotifyPropertyChanged,那麼每次其中一個元素引發屬性更改事件時,整個列表都會被用來找出引發該事件的項目列表中的索引!當我第一次意識到這一點時,我感到震驚。您看到BindingList實際上只是Collection上的一個相當薄的包裝器,所以沒有與每個條目關聯的元數據,元素PropertyChanged事件的所有綁定都指向單個處理程序,並且它獲取的所有內容都是源和名稱的更改屬性,因此無法在不執行搜索的情況下在ListChangedEventArgs中包含NewIndex參數。 (默認情況下,這個搜索甚至使用默認的對象比較器,所以如果你碰巧在你的列表中有兩個不同但有時候是相同的對象,那麼享受結果...)

另一個側面說明 - AddNew,BindingList具有哪個收集不 - 也不會縮放。它必須使用IndexOf來查找列表中新添加的項目在需要取消添加的情況下結束的位置,因爲它支持派生類型中的自動排序。 (的BindingList不支持自動排序本身...)

+0

太棒了! Thx一噸!這是我想知道的...級聯項目更改通知!我的信心恢復了。 :-) – 2012-03-02 13:44:45

+12

鏈接條目的標題是「BindingList不縮放」。有趣的,但仔細閱讀 - 只有在評論部分,你是否發現作者的應用程序是不尋常的,他希望在他的用戶界面上實時顯示大量的更新。不太可能成爲更常見的UI場景中的問題。 – 2013-07-02 19:00:00

+1

所以它安全地說,綁定列表在99%的wpf應用程序中工作正常 – MegaMind 2015-05-03 06:27:49