0
 <Grid>
        <ItemsControl ItemsSource="{Binding ScreenViewModelCollection}">
            <ItemsControl.Resources>
                <DataTemplate DataType="{x:Type redScreenView:RedScreenView}">
                    <Grid>
                        <redScreenView:RedScreenView/>
                    </Grid>
                </DataTemplate>

                <DataTemplate DataType="{x:Type greenScreenView:GreenScreenView}">
                    <Grid>
                        <greenScreenView:GreenScreenView/>
                    </Grid>
                </DataTemplate>

            </ItemsControl.Resources>
        </ItemsControl>

它不是为它的 ViewModel 绘制视图,而是打印视图所属的命名空间!但使用 ItemTemplate 仅适用于其中之一。并且 ItemTemplate 不能有多个内容:(

4

2 回答 2

2

当我怀疑你的contains时,你DataTemplates是。ViewsScreenViewModelCollectionViewModels

您只需要将DataType属性ViewModels改为Views

<DataTemplate DataType="{x:Type myViewModels:RedScreenViewModel}">
    <Grid>
        <redScreenView:RedScreenView/>
    </Grid>
</DataTemplate>

<DataTemplate DataType="{x:Type myViewModels:GreenScreenViewModel}">
    <Grid>
        <greenScreenView:GreenScreenView/>
    </Grid>
</DataTemplate>
于 2012-07-03T12:30:53.957 回答
0

我错过了 redScreenView/greenScreenView 命名空间的定义、ScreenViewModelCollection 的类型、ItemsControl.ItemTemplate 的 xaml - 所以我只是假设:

编辑:请查看您的 xaml,我认为您有一些错别字。您的 DataTemplates 的 DataType 应该是视图模型数据模板的内容当然是视图。

尽管如此,本地定义命名空间并且必须在您的窗口/用户控件定义中。例如

 <UserControl xmlns:local="clr-namespace:MyWpfApplication1.MyTest.ViewModels" 
              xmlns:views="clr-namespace:MyWpfApplication1.Controls.Views" 


    <ItemsControl ItemsSource="{Binding ScreenViewModelCollection}">
        <ItemsControl.Resources>
            <DataTemplate DataType="{x:Type local:RedScreenViewModel}">
                <Grid>
                    <views:RedScreenView/>
                </Grid>
            </DataTemplate>
            <DataTemplate DataType="{x:Type local:GreenScreenViewModel}">
                <Grid>
                    <views:GreenScreenView/>
                </Grid>
            </DataTemplate>
        </ItemsControl.Resources>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <ContentPresenter Content="{Binding}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

这个 ItemTemplate 对你有用吗?

于 2012-07-03T11:53:34.030 回答