Должен ли мой ViewModel иметь наблюдательную экологию представлений или моделей View?
-
12-09-2019 - |
Вопрос
Я пытаюсь понять базовый подход дизайна MVVM при использовании Itemscontrol Привязывая его через DataTemplates к Наблюдения на ViewModel.
Я видел примеры, которые связываются с наблюдениями строки, Просмотры, а также ViewModels.
Связывание с строками, кажется, только для демо, это обязательно к "ViewModels, которые содержат коллекции представлений, которые содержат коллекции ViewModels"То, что сила WPF, кажется, действительно выходит.
Для тех, кто используется опытным в шаблоне MVVM, каков ваш стандартный подход к привязывающим элементам Concrol, ListView, ListBox к коллекциям в ViewModel? Я ищу совета от опыта, как это:
- Всегда используйте ObservableCollection <...> и никогда не перечислите <...>, потому что ...
- Что -то лучше, чем itemscontrol для отображения коллекции ...
- Чтобы получить фильтрацию для работы в вашем просмотке, а не в коде, используйте ...
- Используйте коллекции представлений, когда ... и коллекции ViewModels, когда ...
- 90% случаев, когда я создаю элементы, и связываю его с наблюдением за сознанием представлений, которые имеют свои собственные просмотры ...
Решение
Я бы использовал наблюдение за просмоткой моделей по следующим причинам:
- ObservableCollection уже имеет события, доступные для передачи сигналов, когда она была изменена (например, когда элементы добавляются/удаляются из коллекции).
- Мы находимся в ViewModel «слое», поэтому он обеспечивает более чистое разделение, чтобы ViewModel содержит коллекцию ViewModels, а не просмотров
- Если необходимо изменить или получить данные из элементов в сборе, вы можете легче изменить/получить доступ к этим данным, если элементы являются ViewModels (если они просмотры, вы часто будете отдавать в обработке данных View DataContext или доступ к его элементам пользовательского интерфейса).
Другие советы
Мне нравится использовать наблюдение за просмоткой. Представление, которое связывается с коллекцией, может определить DataTemplate, который придает ViewModel. Это приводит к меньшему связке среди компонентов.
У меня тот же вопрос, но замените «представление» на «модель». :)
У меня есть модель с набором других моделей. Я хочу, чтобы у моей ViewModel была наблюдаемая коллекция других ViewModels, но как только я создаю ее так, - связь между контентом сбора модели теряется. Нужно ли теперь начать проводку все события из наблюдаемой коллекции ViewModels обратно в коллекцию моделей?