4

即使我可以很好地利用 CM,我仍然认为自己是初学者。我在 codeplex 阅读了 Rob Eisenberg 关于屏幕和导体等的精彩介绍。如果我理解正确,导体本身就是一个屏幕,可能会显示屏幕。

但是我不知道如何开始实现这样的事情(非常伪代码):

XAML

<Grid>
  <Left x:Name="Menu" />
  <Right x:Name="Content/ActiveItem" />
</Grid>

现在,我如何加载两个不同的屏幕,或者可能是导体,以在这两个位置显示?

我试图从“HelloScreens”示例中理解,但遗憾的是它有很多依赖项,我不知道如何让它运行。我可以看到 ShellView 似乎有两个 targettable 区域,一个是通常的“ ActiveItem ”,另一个称为“ Dialogs ”,但对“Dialogs”的字符串搜索什么也没显示。在这个时间点,那里发生了太多的魔法。

因此我的问题。最终掌握视图如何在 XAML 中结束以及如何使用 Caliburn.micro 实现上述目标的最佳策略是什么?

干杯

4

1 回答 1

4

Caliburn 提供了多种开箱即用的导体。一个没有项目集合(但有一个 ActiveItem)的导体,以及几个具有项目集合和一个 ActiveItem 的导体。

您当然也可以实现自己的指挥,但这听起来没有必要。听起来你只是想让你ShellViewModel成为一名指挥,也许一个拥有一系列正在指挥的项目的指挥会最有意义,所以你可以ShellViewModelConductor<IScreen>.Collection.OneActive.

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

ShellViewModel您的行为可以源自的每个项目Screen,因此它们具有通常的屏幕生命周期(OnActivateOnDeactivate)。你MenuViewModel没有被执行并且不需要屏幕生命周期,所以可以从PropertyChangedBase.

使用 Caliburn.Micro,只要您ContentControl的视图上有一个与视图模型上的属性同名且其值本身就是视图模型的属性,那么 Caliburn.Micro 将定位该视图模型视图,并将其注入 ContentControl,并且也要注意绑定。

所以你ShellViewModel可以有一个MainMenutype 的属性MenuViewModel,你的 shell 视图看起来像:

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="200" />
    <ColumnDefinition Width="*" />
  </Grid.ColumnDefinitions>
</Grid>

<ContentControl x:Name="MainMenu" Grid.Column="0" />
<ContentControl x:Name="ActiveItem" Grid.Column="1" />
于 2011-02-27T21:13:01.710 回答