Почему бы не 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
отлично работает с BindingList
s тоже. Они одинаково заметны.
будучи хардкорным разработчиком WPF сам и ObservableCollection
фан, моя вера потрясена тем, что было-там-сделано-это BindingList
....
почему я должен использовать ObservableCollection
над BindingList?
(сохраняя в стороне INotifyPropertyChanged, которые оба должны реализовать для изменений свойств элемента)
1 ответов
Это может быть интересно:
http://www.themissingdocs.net/wordpress/?p=465
наиболее важные пункты:
но реализация не масштабируется, она медленная, она ужасно работает с большими списками. Если ваш тип элемента поддерживает INotifyPropertyChanged, каждый раз, когда один из этих элементов вызывает событие изменения свойства, весь список идет, чтобы разработать индекс в списке элемента, который вызвал событие! Я я был в шоке, когда впервые это понял. Вы видите, что BindingList действительно является довольно тонкой оболочкой над коллекцией, поэтому нет метаданных, связанных с каждой записью, вся привязка события элемента PropertyChanged направлена на один обработчик, и все, что он получает, это источник и имя измененного свойства, поэтому нет способа включить параметр NewIndex в ListChangedEventArgs без выполнения поиска. (По умолчанию этот поиск даже использует объект по умолчанию, поэтому, если у вас есть два разных, но иногда равных объекта в вашем списке, наслаждайтесь результатами...)
другое Примечание – AddNew, другая функция, которая имеет BindingList, которая не имеет коллекции-также не масштабируется. Он должен использовать IndexOf, чтобы узнать, где в списке вновь добавленный элемент оказался, если ему нужно отменить добавление, потому что он поддерживает автоматическую сортировку в производных типах. (BindingList не поддерживает автоматическую сортировку...)