我仍然认为自己是初学者,尽管我可以很好地利用CM。我在Codeplex上的Rob Eisenberg的屏幕和导体等上阅读了这个nice introduction。如果我理解正确,指挥本身就是一个屏幕,可能会显示屏幕。
但是我不知道如何开始实现这样的事情(非常伪代码):
XAML
<Grid>
<Left x:Name="Menu" />
<Right x:Name="Content/ActiveItem" />
</Grid>
现在,如何在这两个位置显示两个不同的屏幕或导体?
我试图从“HelloScreens”示例中了解到,但遗憾的是它有很多依赖项,我不知道如何让它运行。我可以看到ShellView似乎有两个目标区域,一个是通常的“ ActiveItem ”,另一个叫做“ Dialogs ”,但在“Dialogs”上的字符串搜索显示没有。此时此刻还有太多的魔法。
因此我的问题。什么是最终策略才能最终掌握XAML中的Views以及如何使用Caliburn.micro实现上述内容的最佳策略?
干杯
答案 0 :(得分:4)
Caliburn带有几种开箱即用的导体。一个没有项目集合的导体(但是一个ActiveItem),以及一些带有项目集合和一个ActiveItem的指挥。
你当然也可以实现你自己的指挥,但这听起来没必要。听起来你只是希望你的ShellViewModel
成为指挥,也许是一个带有一系列项目的导体最有意义,所以你可以从ShellViewModel
推导出你的Conductor<IScreen>.Collection.OneActive
您的菜单不需要执行任何项目,可能只需要引用Items
上的ShellViewModel
集合。在ShellViewModel
构造函数中,您可以实例化将出现在菜单上的每个视图模型(可能使用抽象工厂将是最好的方式),然后将Items引用传递给MenuViewModel
。
ShellViewModel
所执行的每个项目都可以从Screen
派生,以便它们具有正常的屏幕生命周期(OnActivate
,OnDeactivate
等)。您的MenuViewModel
未执行且不需要屏幕生命周期,因此可以从PropertyChangedBase
派生。
使用Caliburn.Micro,只要视图上的ContentControl
与视图模型上的属性同名,其值本身就是视图模型,那么Caliburn.Micro将找到该视图模型视图,并将其注入ContentControl,并处理绑定。
因此,您的ShellViewModel
可能具有类型为MainMenu
的{{1}}属性,您的shell视图将如下所示:
MenuViewModel