Caliburn.Micro обрабатывает действия маршрутизации для вас, если вы правильно настроили View и ViewModel (он использует некоторые неявные предположения, которые могут быть или не быть вашей чашкой чая) Вот ссылка о действиях: http://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&referringTitle=Documentation
Лучшим, менее тесно связанным способом сделать то же самое является использование Event Aggrigator - http://caliburnmicro.codeplex.com/wikipage?title=The%20Event%20Aggregator&referringTitle=Documentation
Взгляните, например, на пример кода HelloEventAggrgator, доступный в исходном коде Caliburn.Micro ... Но основной момент таков:
Вы создаете пользовательские события для использования агрегатором.
public YourEvent
{
...
}
Ваше мнение будет публиковать эти пользовательские события - ему все равно, кто слушает, только то, что событие публикуется.
public YourCodeBehind
{
public Button_Clicked(...)
{
this.Events.Publish(new YourEvent());
...
}
....
}
Ваши ViewModels будут настроены для обработки этих событий, добавив IHandle
[Export(typeof(...))]
public class YourViewModel : IShell, IHandle<YourEvent>
{
[ImportingConstructor]
public YourViewModel(IEventAggregator events)
{
events.Subscribe(this);
...
}
public Handle(YourEvent event)
{
...
}
...
{
Этот метод поддерживает очень высокий SoC, позволяя представлению действительно иметь дело только с привязкой к данным и публикацией событий - представление не заботится о том, как обрабатываются события.
Каждая модель представления затем настраивается для обработки событий путем добавления интерфейса IHandle. (Обратите внимание, что у вас может быть много разных интерфейсов IHandle в одной ViewModel) ViewModel не заботится о том, как событие было вызвано, только о том, что оно было, и что оно является полномочным для обработки этого события из Aggregator.