Подтвердить что ты не робот

Почему NOT 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. Они одинаково заметны.

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

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

4b9b3361

Ответ 1

Это может представлять интерес:

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

наиболее важные параграфы:

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

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