C# WFP将ViewModel绑定到嵌套在另一个listbox中的listbox,这两个listbox都使用数据模板

C# WFP将ViewModel绑定到嵌套在另一个listbox中的listbox,这两个listbox都使用数据模板,c#,wpf,binding,datatemplate,C#,Wpf,Binding,Datatemplate,我正在使用WPF 4.0和Caliburn Micro在C#中开发一个应用程序。我需要将ViewModel绑定到listbox,listbox是DataTemplate中的控件之一。此DataTemplate用作外部列表框中的ItemTemplate,并且。。。不,我想这不是很清楚 让我试着用一个有几个房间的酒店的例子来解释我需要做什么,每个房间都有几个客人 酒店屏幕上有一个名为Rooms的列表框,该列表框绑定到一个ObservableCollection(也称为Rooms),其中包含RoomV

我正在使用WPF 4.0和Caliburn Micro在C#中开发一个应用程序。我需要将ViewModel绑定到listbox,listbox是DataTemplate中的控件之一。此DataTemplate用作外部列表框中的ItemTemplate,并且。。。不,我想这不是很清楚

让我试着用一个有几个房间的酒店的例子来解释我需要做什么,每个房间都有几个客人

酒店屏幕上有一个名为Rooms的列表框,该列表框绑定到一个ObservableCollection(也称为Rooms),其中包含RoomViewModel项。Rooms列表框有一个名为RoomTemplate的ItemTemplate,如下所示:

<ListBox x:Name="Rooms" ItemTemplate="{DynamicResource RoomTemplate}"/>

RoomTemplate的外观如下(高度简化):


RoomViewModel包含一个名为Guests的ObservableCollection,其中包含GuestViewModel项。RoomTemplate包含一个名为Guests的列表框,该列表框应在Guests集合中显示GuestViewModel项。GuestTemplate将包含几个需要绑定到GuestViewModels的文本块

列表框室到收集室的第一次绑定由CM的conventions binder处理,效果很好。我的问题是GuestTemplate中listbox来宾的第二个绑定。如何将其绑定到Rooms集合中包含的RoomViewModels中的来宾项目?


<ListBox ItemsSource="{Binding Guests}" ItemTemplate="{DynamicResource GuestTemplate}"/>

ItemTemplate
设置为
DynamicResource
,并在
DataTemplates
中为
Room
Guest
使用
DataType
有什么区别?@Bob。不同之处在于,如果设置
项目模板
,则给定
列表框
项目控件
中的所有项目都将具有相同的模板,而使用
数据模板。数据类型
可以让WPF为每个项目找到合适的模板,因此,允许在同一个ListBox/ItemsControl中使用不同的模板。是否存在使用一个模板而不是另一个模板的情况?如果您知道
列表框
将有
类型A
对象,您是否仍应指定在
项目模板
中使用
类型A模板
,而不是将
数据模板
放在
列表框内。参考资料
?然后在
ListBox.Resources中使用
typeb模板
,并让WPF解析
数据类型
本身?好的,我已经解决了它。解决方案是ItemsSource=“{Binding Guests}”,我已经尝试过了,但我的代码中还有另一个错误,所以它无法工作。谢谢大家!
<ListBox ItemsSource="{Binding Guests}" ItemTemplate="{DynamicResource GuestTemplate}"/>