Должен ли мой ViewModel иметь ObservableCollection of Views или ViewModels?
Я пытаюсь понять базовый подход MVVM при использовании ItemsControl, привязывая его через DataTemplates к ObservableCollections в ViewModel.
Я видел примеры, которые связываются с ObservableCollections строк, Views и ViewModels.
Привязка к строкам, по-видимому, относится только к demos, это привязка к " ViewModels, которые содержат коллекции Views, которые содержат коллекции ViewModels", что мощность WPF кажется, действительно выходит.
Для тех, кто пользуется шаблоном MVVM, каков ваш стандартный подход к привязке ItemsControl, ListView, ListBox к коллекциям в ViewModel? Я ищу советы из этого опыта:
- всегда использовать ObservableCollection <... > и никогда не List <... > потому что...
- что-то лучше, чем ItemsControl для отображения коллекции...
- чтобы заставить фильтр работать в вашей ViewModel вместо кода, используйте...
- использовать коллекции Views, когда... и коллекции ViewModels, когда...
- 90% времени я создаю ItemControl и привязываю его к ObservableCollection of Views, у которых есть свои собственные ViewModels...
Ответы
Ответ 1
Я бы использовал ObservableCollection ViewModels по следующим причинам:
- ObservableCollection уже имеет события, доступные для сигнализации, когда он был изменен (например, когда элементы добавлены/удалены из коллекции).
- Мы находимся на уровне ViewModel, поэтому он обеспечивает более чистое разделение, чтобы ViewModel содержал коллекцию ViewModels, а не Views
- Если необходимо изменить или получить данные из элементов в коллекции, вы можете более легко изменить/получить доступ к этим данным, если элементы являются ViewModels (если они представляют собой виды, вы часто будете бросать View DataContext или получать доступ к его интерфейсу элементы).
Ответ 2
Мне нравится использовать ObservableCollection из ViewModels. Представление, которое связывается с коллекцией, может определить DataTemplate, который дает ViewModel его внешний вид. Это приводит к меньшему сцеплению компонентов.
Ответ 3
У меня есть тот же вопрос, но замените "представление" на "модель".:)
У меня есть модель с коллекцией других моделей.
Я хочу, чтобы моя viewmodel имела наблюдаемую коллекцию других моделей viewmodels, но как только я создаю ее так: связь между содержимым коллекции модели теряется.
Должен ли я теперь начать проводку всех событий из наблюдаемой коллекции viewmodels обратно в коллекцию моделей?