Read about conductors and screens in official documentation.
As a simple example, your ShellViewModel could be the Conductor one active screen (i.e. only one screen becomes active / inactive at a time):
public class ShellViewModel : Conductor<IScreen>.Collection.OneActive
You can then install ActiveItem from Conductor into the instance of the view model that you want to activate at the moment:
this.ActivateItem(myMainViewModel);
The Conductor collection type also provides an Items collection that you can populate when creating new windows. The view models in this Items collection may be those that are currently deactivated but not yet closed, and you can activate them using ActivateItem , as described above. It also makes it easy to create open window menus using ItemsControl with x:Name="Items" in your ShellView .
Then, to create a ShellView , you can use the ContentControl and set its name in the same way as the ActiveItem property, and Caliburn.Micro will do the rest:
<ContentControl x:Name="ActiveItem" />
You can then respond to activation / deactivation in MainViewModel by overriding OnActivate / OnDeactivate in this class.
devdigital
source share