MVVM / ViewModel / Элементы управления пользователя / DataContext / Команда - Проблема разработки / Обсуждение - PullRequest
1 голос
/ 06 января 2011

У меня есть пользовательский элемент управления, который отображает / управляет одним или несколькими адресами для объекта (сотрудника, предприятия и т. Д.).

Я использовал этот пользовательский элемент управления из различных представлений - инкапсулируя пользовательский интерфейс адреса вэлемент управления.

У меня есть несколько ViewModel, которые содержат / представляют коллекцию адресов с разных точек зрения - каждая из которых обычно управляется другой ViewModel (одна ViewModel для каждого View)

У меня естьпередал соответствующий DataContext пользовательскому элементу управления, что означает, что, хотя у меня есть различные ViewModels, которые предоставляют коллекцию адресов, я могу передать соответствующий контекст через привязку DC.

Затем возникает вопрос, куда поместить командную логикудля добавления и удаления адресов?Я не хочу помещать команды, которые являются идентичными в каждой модели представления, поскольку это было бы просто повторяющимся кодом.

Будучи новичком в MVVM, я просто создал бы класс с интерфейсом IAddressCommand - и затем заглушил быКоманды в каждой из ViewModels?Должен ли я просто инкапсулировать модель представления в другую модель представления?

Мысли?

С уважением, Ричард

Ответы [ 2 ]

1 голос
/ 06 января 2011

Если команды одинаковы для каждого типа адреса, рассмотрите возможность использования базовой ViewModel, от которой наследуются ViewModels адреса.Общий код команды может быть помещен в базовый класс.

0 голосов
/ 06 января 2011

Предоставьте сервис (не ViewModel), который может связать эти компоненты вместе, если вы уверены, что вам нужен подход 1: 1 в отношении ваших ViewModels: View.Затем вы должны будете позвонить в службу внутри ViewModel, которая позаботится о добавлении / удалении адресов из базовой коллекции.Эта услуга может затем использоваться несколькими ViewModels по мере необходимости.

Если вы готовы изменить свой дизайн;используйте одну ViewModel или уменьшите ее, что может дать возможность добавлять / удалять адреса из базовой коллекции, а затем может использоваться и использоваться несколькими представлениями.в сервисе будет лучший подход;хотя одного из них будет достаточно.

...