C# 在Datatemplate中使用Usercontrol

C# 在Datatemplate中使用Usercontrol,c#,wpf,user-controls,datatemplate,caliburn.micro,C#,Wpf,User Controls,Datatemplate,Caliburn.micro,在一个项目中,我开始使用Caliburn.Micro 现在,我想将一个大的用户控件拆分为几个较小的用户控件,以便在数据模板中使用它们。艾森伯格效应建议这样做 这些视图模型的ViewModels已经存在,因为我将分层数据建模为observedcollection 现在我想我只需要为那些子视图模型创建suiting视图作为用户控件 我的视图是主详细信息视图。我想展示一个计算机列表,在“详细信息”视图中,我想展示这些计算机的硬件组件 <ListView x:Name="ComputerViewM

在一个项目中,我开始使用
Caliburn.Micro

现在,我想将一个大的
用户控件
拆分为几个较小的
用户控件
,以便在
数据模板
中使用它们。艾森伯格效应建议这样做

这些视图模型的
ViewModels
已经存在,因为我将分层数据建模为
observedcollection

现在我想我只需要为那些
子视图模型创建suiting
视图
作为
用户控件

我的视图是主详细信息视图。我想展示一个计算机列表,在“详细信息”视图中,我想展示这些计算机的硬件组件

<ListView x:Name="ComputerViewModels">
    <ListView.ItemTemplate>
            <DataTemplate>
                <ContentControl x:Name="HardwareComponentViewModel" />
            </DataTemplate>
     </ListView.ItemTemplate>
</ListView>

我已经包括了这里建议的调试输出:

我没有得到任何关于我的HardwareComponentViewModel的输出,除了
未应用操作约定:set\u HardwareComponentViewModel没有可操作元素

在创建ComputerViewModels时,已经创建了HardwareComponentViewModels

我已经在应用程序的其他部分使用了
ContentControl
-方法,它在那里工作得非常好(使用IOC将
内容
注入到外部ViewModel中)。 但它似乎不适合DataTemplate部分(尽管这并不奇怪)。子视图模型作为外部视图模型从
屏幕
派生


如何使用新的UserControl作为数据模板?

仔细看看EisenbergEffect的答案。这里明确指出,约定在
DataTemplate
中不起作用,因此如果您有一个复杂的模板,最好将其移到一个单独的
UserControl
,约定将在其中再次起作用

这意味着您必须在模板内显式绑定模型:

<ListView x:Name="ComputerViewModels">
    <ListView.ItemTemplate>
            <DataTemplate>
                <ContentControl cal:View.Model="{Binding HardwareComponentViewModel}" />
            </DataTemplate>
     </ListView.ItemTemplate>
</ListView>


应该这样做。无论是那样还是
cal:Model.Bind=“{…}”
,我都记不起区别和用例。现在在绑定的
UserControl
HardwareComponentView
)中,视图和视图模型之间的约定应该照常工作。

我有点震惊。我想我已经试过至少三次了。刚刚插入
,现在它可以工作了!非常感谢你!(顺便说一句,不起作用的惯例是我想分割视图的主要原因)@MareInfinitus没问题,很高兴我能帮忙。琐碎的错误往往最难抓住:)