WPF Caliburn.Micro / mvvm导航

我正在建设一个项目,直到现在我遇到的最大问题之一是导航。
我一直在寻找一些时间用于caliburn.micro / mvvm导航的例子,但它们似乎都很长,我真的不太了解它(初学者在这里!)。

关于我的项目的一些信息:
我希望有一个外部窗口/shell,菜单链接/选项卡根据在shell内部单击的按钮打开页面,并且能够打开从一个内部更改页面。

我目前有:ShellViewModel.cs,MainViewModel.cs,我的模型和我的视图。 目前,我需要知道的是如何在启动时使用contentcontrol / frames …加载MainViewModel并使用contentcontrol / frames …,以及如何从一个页面移动到另一个页面。

你也可以用点数来写它,并把我链接到一些有用的例子,我相信我可以从那里继续。 如果可能的话,最好彻底解释一下这些东西。

在官方文档上阅读有关导体和屏幕的内容。

举个简单的例子,你的ShellViewModel可能是一个活动屏幕的Conductor (即一次只有一个屏幕变为活动/非活动状态):

 public class ShellViewModel : Conductor.Collection.OneActive 

然后,您可以将ConductorActiveItem设置为您希望当前处于活动状态的视图模型实例:

 this.ActivateItem(myMainViewModel); 

集合Conductor类型还提供了一个Items集合,您可以在实例化新窗口时填充它。 此Items集合中的Viewmodel可能是当前已停用但尚未关闭的视图模型,您可以使用上述ActivateItem激活它们。 通过在ShellView使用带有x:Name="Items"ItemsControl ,可以非常轻松地创建打开的窗口菜单。

然后,要创建ShellView ,您可以使用ContentControl并将其名称设置为与ActiveItem属性相同,Caliburn.Micro将完成剩下的工作:

  

然后,您MainViewModel通过覆盖该类中的OnActivate / OnDeactivate来响应MainViewModel的激活/取消激活。

在ShellView中,您使用如下内容控件:

       

ShellViewModel:

 public class ShellViewModel : Screen { private object Child; public object Child { get{ return child; } set { if(child == value) return; child = value; NotifyOfPropertyChange(() => Child); } } public ShellViewModel() { this.Child = new MainViewModel(); } public void ShowOtherView() { this.Child = new FooViewModel(); } } 

所以这是一个非常基本的例子。 但是如您所见,您的ShellView提供了一个ContentControl ,它显示了子视图。 此ContentControl通过View.Model绑定到View.ModelChild属性。

在ShellView中,我使用一个按钮来显示不同的视图,但您也可以使用菜单或类似的东西。