gpt4 book ai didi

c# - Caliburn Micro -> 从多个 View /用户控件/自定义控件组合 View

转载 作者:行者123 更新时间:2023-12-02 04:42:34 25 4
gpt4 key购买 nike

如何在 CM 管理的窗口中重用和组合部件?我找到了关于使用两个 UserControls 绑定(bind)到同一个 ViewModel 的帖子,但如果我想在同一个窗口中包含多个 View 和 View 模型,那就不是那么多了。 (每个 View 的 View 模型组成“主视图”)

我的问题的第一部分是如何分解码件以供重用?如果我有一个窗口的两个区域,一个是数据网格,另一个是带有标签和文本框的详细 View ,它们应该位于单独的用户控件、自定义控件还是窗口中?理想情况下,每个窗口都是独立的,这样它们就可以分开并在其他窗口中使用。

所以如果它们是分开的,我最终会得到 2 个 View 模型和 2 个 View 。现在假设我想创建 3 个窗口,一个窗口有第一个 View ,第二个窗口有第二个 View ,第三个窗口有两个 View 。我如何使用 CM 为每个窗口创建窗口并将每个 View 连接到它们的 View 模型?从我看到的例子中,我看到的大部分是一个窗口中的单个 View 和 View 模型。

最佳答案

我不会以任何方式声称自己是 CM 专家,但我已经通过我一直在编写的一个简单的“基准浏览器”取得了合理的成功。它使用一个单独的“shell View ”,该 View 由两个其他 View 组成,每个 View 都有自己的 ViewModel。外壳 View 如下所示:

<Window x:Class="NodaTime.Benchmarks.Explorer.Views.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="NodaTime Benchmarks" Height="350" Width="525">
<Grid>
<Grid.ColumnDefinitions>...</Grid.ColumnDefinitions>
<ContentControl x:Name="BenchmarkPicker" Grid.Column="0"/>
<GridSplitter ... />
<ContentControl x:Name="ResultsGraph" Grid.Column="2"/>
</Grid>
</Window>

那么ResultsGraphViewBenchmarkPickerView分别是这样的:

<UserControl x:Class="NodaTime.Benchmarks.Explorer.Views.ResultsGraphView"
... namespaces etc ...>
<Grid>
<Grid.RowDefinitions>...</Grid.RowDefinitions>
<Grid.ColumnDefinitions>...</Grid.ColumnDefinitions>
... controls ...
</Grid>
</UserControl>

ShellViewModel 将其他两个 ViewModel 公开为属性。然后这些会在构建时自动传递给 View 。 ( Bootstrap 不提供任何获取它们的方法。)

现在这完全不符合您的描述,因为我认为您不能将两个单独的 View 单独用作窗口 - 我怀疑您最终会得到总共 5 个 View :

SubViewOne - a UserControl with the first view parts
SubViewTwo - a UserControl with the second view parts
JustViewOne - a Window containing just SubViewOne
JustViewTwo - a Window containing just SubViewTwo
BothViews - a Window containing both SubViewOne and SubViewTwo

我不认为有一种方法可以绕过这样一个事实,即您不想要一个 Window within 另一个,并且顶层窗口必须是……嗯,Window

希望这对您有所帮助,如果您想了解我正在执行此操作的小项目的更多详细信息,请告诉我 - 它与生产质量相去甚远,尤其是在 DI 方面,但它可能足以帮助您开始。

关于c# - Caliburn Micro -> 从多个 View /用户控件/自定义控件组合 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20512461/

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