【问题标题】:Caliburn.Micro: Different "Targets" in XAML and how to get Views/Viewmodels into thereCaliburn.Micro:XAML 中的不同“目标”以及如何将视图/视图模型放入其中
【发布时间】:2011-07-05 07:17:00
【问题描述】:

即使我可以很好地利用 CM,我仍然认为自己是初学者。我从 Codeplex 的 Rob Eisenberg 那里读到了这个nice introduction 的屏幕和导体等。如果我理解正确,Conductor 本身就是一个屏幕,可能会显示屏幕。

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

XAML

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

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

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

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

干杯

【问题讨论】:

    标签: .net wpf mvvm caliburn.micro


    【解决方案1】:

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

    您当然也可以实现自己的指挥,但这听起来没有必要。听起来你只是想让你的ShellViewModel 成为一名指挥,也许一个拥有一系列正在指挥的项目的指挥者最有意义,所以你可以从Conductor&lt;IScreen&gt;.Collection.OneActive 派生你的ShellViewModel

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

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

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

    所以你的ShellViewModel 可以有一个MainMenu 类型为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" />
    

    【讨论】:

    • 听起来不错!练习太累了,但希望明天!
    • 如果我按照建议的方式拥有一个带有视图模型的属性,那么 viemodel 将没有父级,它将为空。有什么解决办法吗?
    • 你能用你尝试过的例子打开一个新问题吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多