Caliburn.Micro:XAML中的不同“目标”以及如何将Views / Viewmodels放入其中

时间:2011-02-27 16:51:18

标签: .net wpf mvvm caliburn.micro

我仍然认为自己是初学者,尽管我可以很好地利用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实现上述内容的最佳策略?

干杯

1 个答案:

答案 0 :(得分:4)

Caliburn带有几种开箱即用的导体。一个没有项目集合的导体(但是一个ActiveItem),以及一些带有项目集合和一个ActiveItem的指挥。

你当然也可以实现你自己的指挥,但这听起来没必要。听起来你只是希望你的ShellViewModel成为指挥,也许是一个带有一系列项目的导体最有意义,所以你可以从ShellViewModel推导出你的Conductor<IScreen>.Collection.OneActive

您的菜单不需要执行任何项目,可能只需要引用Items上的ShellViewModel集合。在ShellViewModel构造函数中,您可以实例化将出现在菜单上的每个视图模型(可能使用抽象工厂将是最好的方式),然后将Items引用传递给MenuViewModel

ShellViewModel所执行的每个项目都可以从Screen派生,以便它们具有正常的屏幕生命周期(OnActivateOnDeactivate等)。您的MenuViewModel未执行且不需要屏幕生命周期,因此可以从PropertyChangedBase派生。

使用Caliburn.Micro,只要视图上的ContentControl与视图模型上的属性同名,其值本身就是视图模型,那么Caliburn.Micro将找到该视图模型视图,并将其注入ContentControl,并处理绑定。

因此,您的ShellViewModel可能具有类型为MainMenu的{​​{1}}属性,您的shell视图将如下所示:

MenuViewModel