Catel 中的 ViewModel 集合

Posted

技术标签:

【中文标题】Catel 中的 ViewModel 集合【英文标题】:Collection of ViewModels in Catel 【发布时间】:2014-08-13 12:26:26 【问题描述】:

我有几个DataTemplates 的视图。每个DataTemplate 都有一个 View 和 ViewModel,如下所示:

<DataTemplate DataType="x:Type viewModels:exampleViewModel">
    <AdornerDecorator>
        <ScrollViewer>
            <views:exampleView />
        </ScrollViewer>
    </AdornerDecorator>
</DataTemplate>

然后我有一个绑定到DataContextTabControl

在 DataContext 中,有一个 Collection,其中包含 DataTemplates 引用的所有不同 viewModel 的列表:

<TabControl
    DataContext="Binding"
    ItemsSource="Binding Collection, Mode=OneWay">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock
                Text="Binding" />
        </DataTemplate>
    </TabControl.ItemTemplate>
</TabControl>

显然,包含 TabControl 的 View 有一个“主”ViewModel。

这很好用,为我为集合中的每个项目创建TabItems 并设置每个页面的内容。

我现在想把它移到 Catel,但不知道从哪里开始,因为(如果我错了,请纠正我):

    我现在不应该在任何 ViewModel 中引用任何其他 ViewModel 并且

    Catel 会自动为我链接我的视图和视图模型。

有什么建议吗?

【问题讨论】:

你当前的设计是有缺陷的......如果你的Collection 属性包含你所有的视图模型,那么这意味着它们都被实例化并耗尽了资源,即使它们没有被显示。如果我是你,我会利用搬到 Catel 来重新设计你的设计。 @Sheridan 是的...这就是为什么我要搬到Catel?有什么建议么?关于如何在 Catel 中实现类似的东西,就是这样。这个想法显然不是实例化任何 ViewModel,而是使用我的模型中的项目集合 【参考方案1】:

我建议搬到 Catel。它确实解决了这个问题(这实际上是它首先被编写的原因)。如需一个好的起点,请查看大量文档:

https://catelproject.atlassian.net/wiki/display/CTL/Catel+documentation+Home

一个很好的阅读是 WPF 入门部分:

https://catelproject.atlassian.net/wiki/display/CTL/Getting+started+with+WPF

还可以查看示例存储库:

https://github.com/Catel/Catel.Examples

【讨论】:

是否有我必须针对我的场景查看的具体示例,或者您认为我的设计需要返工。简而言之,是否有使用 Catel 创建具有多个(未知)选项卡项的选项卡控件的“最佳实践”方法?例如,如果我的模型中有一个带有***集合的 Vehicle 对象(但每个***为了参数而不同)并且***的数量不同,我将如何使用 Catel 实现它以使用选项卡控件? Catel 提供了一个 TabControl (Catel.Extensions.Controls) 允许您选择行为:catelproject.atlassian.net/wiki/display/CTL/TabControl 顺便说一句,请确保使用最新的预发布版本,它很稳定,几乎完成了 4.0,升级时将为您节省大量重大更改。 抱歉,我在完成评论之前不小心按了“Enter”...我会看看 Catel 的 Tab Control,谢谢

以上是关于Catel 中的 ViewModel 集合的主要内容,如果未能解决你的问题,请参考以下文章

viewmodel + Catel 上的验证

MahApps 和 Catel MVVM

[Catel]如何将带有构造函数参数的 ViewModel 传递给 TabService 扩展方法?

CATEL按钮未运行UserControl中的执行操作

Catel ViewModelToModel 没有链接

ShowDialog 中的 Catel async await 命令 - 死锁