Почему бы не BindingList в WPF

Я задал этот вопрос и на форумах MSDN ... http://social.msdn.microsoft.com/Forums/en/wpf/thread/4493988a-9bd8-48fe-aff0-348502136a80

мне нужно знать, почему Microsoft предлагает это BindingList не правильно поддерживается в WPF...

что не работает с BindingList в WPF? Я и так нахожу его весьма полезным. До сих пор я лично не нашел BindingList любой медленнее или с большей нагрузкой на память.

плюс WPF ItemsControls, ItemsTemplates, Styles, Hierarchies отлично работает с BindingLists тоже. Они одинаково заметны.

будучи хардкорным разработчиком WPF сам и ObservableCollection фан, моя вера потрясена тем, что было-там-сделано-это BindingList....

почему я должен использовать ObservableCollection над BindingList? (сохраняя в стороне INotifyPropertyChanged, которые оба должны реализовать для изменений свойств элемента)

1 ответов


Это может быть интересно:

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

наиболее важные пункты:

но реализация не масштабируется, она медленная, она ужасно работает с большими списками. Если ваш тип элемента поддерживает INotifyPropertyChanged, каждый раз, когда один из этих элементов вызывает событие изменения свойства, весь список идет, чтобы разработать индекс в списке элемента, который вызвал событие! Я я был в шоке, когда впервые это понял. Вы видите, что BindingList действительно является довольно тонкой оболочкой над коллекцией, поэтому нет метаданных, связанных с каждой записью, вся привязка события элемента PropertyChanged направлена на один обработчик, и все, что он получает, это источник и имя измененного свойства, поэтому нет способа включить параметр NewIndex в ListChangedEventArgs без выполнения поиска. (По умолчанию этот поиск даже использует объект по умолчанию, поэтому, если у вас есть два разных, но иногда равных объекта в вашем списке, наслаждайтесь результатами...)

другое Примечание – AddNew, другая функция, которая имеет BindingList, которая не имеет коллекции-также не масштабируется. Он должен использовать IndexOf, чтобы узнать, где в списке вновь добавленный элемент оказался, если ему нужно отменить добавление, потому что он поддерживает автоматическую сортировку в производных типах. (BindingList не поддерживает автоматическую сортировку...)