Должен ли мой ViewModel иметь наблюдательную экологию представлений или моделей View?

StackOverflow https://stackoverflow.com/questions/964751

Вопрос

Я пытаюсь понять базовый подход дизайна 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 обратно в коллекцию моделей?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top