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没问题,很高兴我能帮忙。琐碎的错误往往最难抓住:)