Wpf 使用列表框(或其他ItemsControl)来承载Caliburn演示者
如果我有一个Wpf 使用列表框(或其他ItemsControl)来承载Caliburn演示者,wpf,mvvm,itemscontrol,caliburn,Wpf,Mvvm,Itemscontrol,Caliburn,如果我有一个MultiPresenter,并且我正在使用ListBox来显示它所承载的Presenters,我如何让Caliburn发现并绑定项目的视图和视图模型 例如,如果我有一个如下所示的简单视图: <UserControl x:Class="MyProject.Views.CarView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:
MultiPresenter
,并且我正在使用ListBox
来显示它所承载的Presenters
,我如何让Caliburn发现并绑定项目的视图和视图模型
例如,如果我有一个如下所示的简单视图:
<UserControl x:Class="MyProject.Views.CarView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<ListBox ItemsSource="{Binding Parts}" />
</Grid>
</UserControl>
而Parts
集合包含实现i Presenter
并具有相应视图的各种对象,例如WheelViewModel
和WheelView
,以及EngineViewModel
和EngineView
我希望Caliburn使用视图策略为我解决视图。这可能吗?在这种情况下,我需要做什么才能正确设置演示者的层次结构?您不必为此更改演示者层次结构。我建议您考虑使用<代码>多演示者。演示者< /代码>属性来收集子ViewModels和<代码>多演示者。打开< <代码> >代码>多演示者。如果需要执行子视图模型生命周期,则关闭< <代码> >方法。 对于绑定问题,您应该为列表框项目定义模板:
<ListBox ItemsSource="{Binding Parts}">
<ListBox.ItemTemplate>
<DataTemplate>
<ContentControl cal:View.Model="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
使用cal:View.Model
attached属性,框架负责为每个ViewModel创建适当的视图,将其绑定到ViewModel并将其注入ContentControl
如果希望框架正确推断视图,还应确保视图和ViewModels的命名空间和类命名遵循Caliburn。否则,您必须编写一个定制的IViewStrategy(尽管并不难)
编辑:修复了cal:View.Model属性中的绑定表达式我认为正确的ContentControl如下所示:You's true。事实上,圆点是多余的。对不起,我弄错了,谢谢你指出。
<ListBox ItemsSource="{Binding Parts}">
<ListBox.ItemTemplate>
<DataTemplate>
<ContentControl cal:View.Model="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>