Как обрабатывать команду из главного окна в модели представления usercontrol - PullRequest
1 голос
/ 17 марта 2011

В моем приложении у меня есть несколько пользовательских элементов управления в окне.Эти пользовательские элементы управления должны общаться друг с другом.Мой подход следующий:

  1. пользовательский элемент управления. Запустить команду, которая должна обрабатываться пользовательским элементом управления B.
  2. главное окно получает команду и запускает команду для B
  3. пользовательский элемент управления B обрабатывает команду.

Моя проблема в том, как главное окно может запускать команду, которая может быть обработана в МОДЕЛИ ПРОСМОТРА пользовательского элемента управления B?

Обновить:

решено: одна глобальная статическая RelayCommand для связи от MainWindow к B и одна Global RoutedCommand для связи от A к главному окну.Спасибо за ответы.

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Вопрос не помечен mvvm (пока), но я предполагаю его, поскольку вы упоминаете ViewModel.Итак, для начала давайте согласимся, что ViewModels обрабатывает команды, а не элементы управления.Если элемент управления хочет ответить на выполняемую команду, предоставьте подходящее событие CommandExecuted, к которому элемент управления (представление) может прикрепить обработчик.

Однако есть еще одно неизвестное, которое я не могу предположить вслепую:

Считаете ли вы само собой разумеющимся, что пользовательские элементы управления A и B существуют одновременно?Если да, то очень простое и низкотехнологичное решение состояло бы в том, чтобы поддерживать ссылки на обе модели ViewModel на некотором уровне (возможно, ViewModel для самого Window?) И «выдавать» команду там, где отправка в ViewModelБ произойдет.Если нет (в этом случае элемент управления B может не существовать), каково желаемое поведение?

Учитывая предоставленную вами информацию, я бы предложил использовать реализацию шаблона Aggregator / Mediator в вашей среде MVVM.,Например, Prism имеет EventAggregator ;MVVM Light имеет Messenger ;и т.д.

1 голос
/ 17 марта 2011

Я думаю, вы захотите иметь свойство зависимости от B, к которому может привязываться главное окно.Затем ваш DP на B примет запрос и назовет его моделью представления.

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

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