В приложении WPF у меня есть ListView, связанный с ObservableCollection на моей модели ViewModel.Очистка ObservableCollection
Во время запуска приложения мне нужно удалить и перезагрузить все предметы в коллекции. Мне больше не нужно добавлять или удалять отдельные элементы.
Это вызывает вопрос, действительно ли ObservableCollection необходим, и могу ли я просто привязать ListView к IEnumerable и вызвать OnPropertyChanged при замене коллекции?
Поскольку ObservableCollection не имеет метода AddRange, единственным способом перезагрузки без замены коллекции было бы добавить каждый элемент по отдельности. Может ли это иметь какие-либо существенные последствия для производительности, поскольку CollectionChanged уволен за каждый добавленный элемент?
Наконец, поскольку я использую ICollectionView для синхронизации выбранного в данный момент элемента, если I сделать заменить коллекцию, мне нужно будет снова вызвать CollectionViewSource.GetDefaultView? Я предполагаю, что могу повторно использовать существующий обработчик CurrentChanged.
Благодаря Бен
Я тестировал это раньше. ObservableCollection быстрее, чем List с уведомлением. – vorrtex
@vorrtex - любая статистика, чтобы поддержать это? И это применимо в моем случае, когда я ищу замену всей коллекции? –
Просто попробуйте сами, используя класс Секундомер. Проблема производительности существует только при отображении элементов, а количество элементов ничего не изменит из-за виртуализации пользовательского интерфейса. – vorrtex