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
然后,您可以将Conductor
的ActiveItem
设置为您希望当前处于活动状态的视图模型实例:
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.Model
的Child
属性。
在ShellView中,我使用一个按钮来显示不同的视图,但您也可以使用菜单或类似的东西。