другие зависимости View(s)?

Посмотреть изображение

У меня есть вид, похожий на изображение, и у ViewModel есть команды для обработки щелчков кнопки (1,2,3,4). В рабочей области позвольте пользователю вводить данные. В зависимости от ввода пользователям разрешено нажимать кнопку;

Каждая кнопка ведет одно новое окно (представление с ViewModel, модель которого будет взята из входных данных). Новое окно имеет собственную логику для отображения данных в зависимости от модели, введенной в ViewModel.

В соответствии со стандартами MVVM, где я могу указать соответствующие View и ViewModels для каждой кнопки? (В представлении / модели просмотра). Как я могу указать то же самое?


person vaduganathan    schedule 05.04.2014    source источник
comment
Вы должны использовать PRISM, чтобы определить регион для вашей рабочей области, а затем загрузить модуль/представление в зависимости от ваших требований.   -  person Firoz    schedule 05.04.2014
comment
Спасибо за ответ. У меня есть немного информации о вашем ответе. Но есть ли другой прямой путь (вместо использования Prism/MVVM Light)? Потому что мы уже построили приложение. Сейчас не так просто конвертировать всю кодировку.   -  person vaduganathan    schedule 05.04.2014
comment
Являются ли окна представлений, которые вы показываете, поверх представлений, которые вы показали здесь (Window.Show() или Window.ShowDialog()), или представления отображаются в рабочей области?   -  person user3411327    schedule 05.04.2014
comment
Фактический план состоит в том, чтобы показать как новое окно с ShowDialog.   -  person vaduganathan    schedule 05.04.2014


Ответы (1)


По сути, ViewModel является связующим звеном между View и Model, поэтому каждая комбинация View и Model должна иметь отдельную ViewModel (если она допустима).

По моему опыту, в большинстве случаев мы имеем дело с двумя видами View:

  1. небольшие представления, такие как значки, расширенные кнопки и т. д. (которые более изолированы и, скорее всего, не имеют ссылок на своих родителей, поэтому ими легко управлять и их можно обобщать)
  2. крупные представления, такие как окна, панели (которые имеют много дочерних элементов и с большей вероятностью будут изменены позже)

Для небольших представлений общие ViewModels могут использоваться для нескольких представлений. а вот для больших Views (учитывая возможные изменения в будущем) лучше не использовать одну общую ViewModel. однако полезно использовать базовый класс ViewModel для реализации некоторых общих функций (если таковые имеются).

Поэтому, помня об этом и стараясь оставаться на стандартном уровне, я предлагаю:

  • ViewModels for secondary windows: (согласно вопросу, я думаю, вам нужно 4) Каждый из них имеет свою независимую функциональность (вы можете получить их все из BaseWindowVm). Лучшей практикой здесь было бы не сообщать им о своих родителях (MainWindowVm) и просто установить их обработчики событий при их создании. Таким образом, вы можете избежать связывания кода.

  • MainWindowVm: состоит из 4 команд и некоторых других входных данных. Каждая команда выполняет следующие шаги:

    1. instantiates a View
    2. создает экземпляр ViewModel for secondary window на основе ввода
    3. установить обработчики событий Vm
    4. назначьте Vm для DataContext представления
    5. добавьте Vm в какой-нибудь список в MainWindowVm (если вы хотите отслеживать эти окна)
    6. ПоказатьДиалог()

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

person Bizhan    schedule 05.04.2014