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

标签 c# mef caliburn.micro

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

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

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

最佳答案

我不会以任何方式声称自己是 CM 方面的专家,但我已经通过我一直在编写的简单“基准浏览器”取得了相当的成功。它使用一个“shell View ”来组成另外两个 View ,每个 View 都有自己的 ViewModel。 shell 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

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

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

相关文章:

c# - 如何制作 "security"- C# 中类的属性?

c# - 带有修改其他插件的插件的基于插件的应用程序

c# - 使用 Caliburn Micro 从 View 模型中的属性名称获取控制权

c# - 通过 .NET 访问 MPEG 传输数据包

c# - TopicClient 应该存活多久?

c# - 如何使用 MEF 在 MVC 3 Razor 中呈现控件

wpf - MVVM应用程序无法正确还原状态

windows-8 - Caliburn Micro WinRT 状态处理

c# - 如何删除 C# 中的 Windows 还原点?

c# - 如何向 VS2013 语法扩展 (MEF) 动态添加补全词