Почему НЕ BindingList в WPF - PullRequest
       30

Почему НЕ BindingList в WPF

14 голосов
/ 02 марта 2012

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

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

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

Plus WPF ItemsControls, ItemsTemplates, Styles, Hierarchies отлично работают с BindingList s.Они одинаково наблюдаемы.

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

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

1 Ответ

16 голосов
/ 02 марта 2012

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

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

самые важные пункты:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...