Caliburn.Micro - Как активировать элемент из класса, кроме проводника - PullRequest
3 голосов
/ 01 июня 2011

Я создал пользовательский интерфейс моего приложения Caliburn.Micro таким образом, чтобы кнопки панели инструментов имели свои собственные View и ViewModel.

В примерах, которые я видел, чтобы активировать новый экран, воболочка вызывает Conductor.ActivateItem, передавая экземпляр viewmodel, однако в моем случае метод ToolbarButtonViewModel.Submit() относится к классу, который не оболочка.

Какой лучший способ активацииэкраны из класса другие , чем оболочка?

Ответы [ 2 ]

13 голосов
/ 01 июня 2011

Вы должны рассмотреть возможность использования EventAggregator.Создайте сообщение, которое обрабатывает главный проводник, и отправьте его с панели инструментов vm.Когда сообщение получено главным проводником, активируйте указанный экран.

1 голос
/ 01 июня 2011

Это звучит как случай взаимодействия между моделями представления (между моделью представления панели инструментов и моделью представления оболочки). В зависимости от того, насколько слабо связан код, вы можете:

  1. Используйте стандартные события .NET. Предполагая, что ShellViewModel имеет ссылку на экземпляр ToolBarViewModel, подпишитесь на событие ToolBarViewModel в ShellViewModel, чтобы обнаружить отправку, и передайте новый экземпляр экрана экземпляру делегата.
  2. Используйте шаблон-посредник (например, EventAggregator, включенный в Caliburn.Micro). Подпишитесь на событие в ShellViewModel и опубликуйте событие в ToolBarViewModel
  3. На самом деле введите ToolBarViewModel в ShellViewModel (возможно, вам придется использовать тип Conductor<T>.Collection.AllActive). ToolBarViewModel будет тогда Screen и будет иметь свойство Parent (да, это ужасно).
...