Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 使用列表框(或其他ItemsControl)来承载Caliburn演示者_Wpf_Mvvm_Itemscontrol_Caliburn - Fatal编程技术网

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>