gpt4 book ai didi

.net - Caliburn.Micro:XAML 中的不同 "Targets"以及如何将 View / View 模型放入其中

转载 作者:行者123 更新时间:2023-12-02 23:46:52 26 4
gpt4 key购买 nike

尽管我可以很好地利用 CM,但我仍然认为自己是一个初学者。我读过这个nice introduction关于 Codeplex 的 Rob Eisenberg 的 Screens 和 Conductors 等。如果我理解正确的话,导体本身就是一个屏幕,并且可以显示屏幕。

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

XAML

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

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

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

这就是我的问题。最终掌握 View 如何在 XAML 中结束以及如何使用 Caliburn.micro 实现如上所示的目标的最佳策略是什么?

干杯

最佳答案

Caliburn 开箱即配有多种类型的导体。一个导体没有项目集合(但有一个 ActiveItem),以及一对导体有项目集合和一个 ActiveItem。

您当然也可以实现自己的指挥,但这在这里听起来没有必要。听起来你只想要你的 ShellViewModel成为一名指挥,也许拥有一组正在指挥的元素是最有意义的,因此您可以导出您的 ShellViewModel来自Conductor<IScreen>.Collection.OneActive .

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

您的每一项ShellViewModel行为可以源自Screen ,以便它们具有通常的屏幕生命周期( OnActivateOnDeactivate 等)。您的MenuViewModel未进行且不需要屏幕生命周期,因此可以从 PropertyChangedBase 派生.

使用 Caliburn.Micro,只要您有 ContentControl在与 View 模型上的属性同名的 View 上,其值本身就是 View 模型,那么 Caliburn.Micro 将找到该 View 模型 View ,并将其注入(inject)到 ContentControl 中,并也处理绑定(bind)。 p>

所以你的ShellViewModel可以有一个MainMenu类型属性MenuViewModel ,您的 shell View 将类似于:

<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" />

关于.net - Caliburn.Micro:XAML 中的不同 "Targets"以及如何将 View / View 模型放入其中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5134473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com