Правильный способ вызова метода на пользовательский элемент управления или UserControl с шаблоном MVVM? - PullRequest
1 голос
/ 11 ноября 2011

Я использую PRISM и MVVM в своем модульном приложении Silverlight. Я все еще пытаюсь выяснить, как правильно делать взаимодействия в стиле MVVM, и 2 метода, которые предлагает PRISM и примеры, мне не нравятся по разным причинам.

Метод 1 (ПРИЗМА): использовать другой адаптер региона. В основном, это включает в себя прикрепленные свойства на контейнере и введение вида в регион. Это работает почти на 100%, но недостатком этого метода является то, что нет хорошего способа сообщить результаты. Я могу использовать EventAggregator, но что-то не так, чтобы вызывать событие с данными после завершения взаимодействия.

Метод 2 (ПРИЗМА): использовать InteractionRequest. Это включает триггерное действие и какой-то большой шаблон XAML, который я должен повторять при каждом просмотре.

Я думаю о том, чтобы создать что-то собственное, что потребовало бы создания моего собственного элемента управления, который должен быть добавлен к каждому представлению, но с очень небольшим количеством XAML и каким-то IPopupService, к которому я могу привязать этот элемент управления. Я могу передать все необходимые данные через PopupService, но для того, чтобы фактически выполнить действие POPUP - мне нужно вызвать метод для этого элемента управления, и он разваливается в MVVM

Интересно, как вызвать метод управления в MVVM, где view не должен знать о VM?

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Просмотр не имеет выбора, кроме как знать о ВМ, поскольку он привязывается к ней.

Вы могли бы действительно определить какой-то сервис с реализацией во время выполнения, которая будет взаимодействовать с пользовательским интерфейсом и реализацией design / test / debug, которая делает что-то еще. Вы также можете опубликовать некоторые события на своем уровне виртуальной машины, которые уровень представления решит, как интерпретировать.

0 голосов
/ 30 апреля 2013

Прежде всего, я не думаю, что MVVM - это хороший выбор, если вы разрабатываете UserControl, который будет использоваться другими.Неуправляемый контроль - это то, что вы действительно должны развивать.У Джеремии Моррилла есть пост в блоге на эту тему.

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

Внутри ControlView.xaml put:

<UserControl.DataContext>
    <local:ControlViewModel />
</UserControl.DataContext>
...