Должен ли я привязываться к ICollectionView или ObservableCollection
Если привязать DataGrid
к
ICollectionView = CollectionViewSource.GetDefaultView(collection)
или к
- Связывающие свойства в коде
- Привязка данных Android с использованием тега include
- ItemsControl с несколькими DataTemplates для viewmodel
- Когда следует использовать # и = в элементах управления ASP.NET?
- Общий class наблюдаемого словаря для DataBinding / WPF C #
ObservableCollection collection;
???
Какова наилучшая практика для MVVM и почему?
- Что означает «{Binding Path =.}» В привязке WPF?
- WPF привязка к локальной переменной
- Как обнаружить сломанные привязки данных WPF?
- Какие подходы доступны для фиктивных данных времени разработки в WPF?
- Привязать к методу в WPF?
- Связывание WPF ComboBox с пользовательским списком
- Почему привязка данных WPF к исключению ласточки?
- Как правильно привязать xml к WPF DataGrid?
Вы всегда привязываетесь к ICollectionView
, независимо от того, используете ли вы его явным или нет.
Предположим, что имеем
var collection = new ObservableCollection(); var collectionView = CollectionViewSource.GetDefaultView(collection);
В этом случае привязка к collection
или collectionView
является одним и тем же: механизм привязки привязывается к представлению коллекции по умолчанию (которое является ссылкой, равным collectionView
), если вы скажете ему привязать к collection
.
Это означает, что ответ на ваш вопрос «это абсолютно не имеет значения».
Просто чтобы быть абсолютно ясным: даже если вы привязываетесь непосредственно к коллекции, механизм привязки привязывается к представлению по умолчанию. Изменение свойств представления, таких как критерии сортировки, повлияет на привязку, которая, как представляется, привязывается непосредственно к коллекции, поскольку позади обложек это привязка к представлению по умолчанию вместо.
Однако есть еще один интересный и смежный вопрос: следует ли привязать к представлению коллекции по умолчанию (то есть к самой коллекции, потому что нет причин явно привязываться к представлению по умолчанию) или к другому представлению той же коллекции?
Учитывая, что каждая точка зрения имеет свое собственное представление о текущем элементе, критериях сортировки и т. Д., Следует, что если вы намереваетесь иметь несколько привязок к одной коллекции, а связанным элементам управления должны быть разные понятия текущего элемента, фильтров и компании, тогда вы хотите явно привязать к нескольким представлениям одной и той же базовой коллекции.
ObservableCollection
реализует INotifyCollectionChanged
и будет уведомлять пользовательский интерфейс, когда элементы в коллекции были изменены.
ICollectionView
предоставит вам возможность фильтровать, сортировать или группировать коллекцию в дополнение к INotifyCollectionChanged
событий INotifyCollectionChanged
если базовая коллекция реализует ее.
Любой тип работает хорошо с MVVM, пока вы привязываетесь к нему. Используйте ICollectionView
когда вам нужна сортировка, фильтрация или группировка. Используйте ObservableCollection
непосредственно, когда вы этого не сделаете.
Просто добавлю, что сказал Джон. Основное отличие состоит в том, что с помощью CollectionViewSource.GetDefaultView(collection)
вы делаете ViewModel в зависимости от WPF. Многим пуристам MVVM это не нравится, и это оставило бы ObservableCollection только действительный вариант.
Другим вариантом будет использование ICollectionView
и использование classа, который его реализует, но не является частью самого WPF.
Я не думаю, что он должен что-то делать с MVVM
. ICollectionView
предоставляет дополнительные функции, такие как группировка поиска и т. Д., Если вам нужны те, которые используют IColectionView
иначе просто используйте ObservableCollection
Вы привязываетесь к представлению, если хотите, чтобы ваша grid отображала параметры, применяемые к представлению, например, фильтрацию, в противном случае представление является избыточным.