DataTemplate不绘制视图,而是打印它在集合中遇到的每个ViewModel类型的类型名称

时间:2012-07-03 10:57:57

标签: c# wpf

 <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绘制View,而是打印View所属的命名空间! 但是使用ItemTemplate仅适用于其中一个。并且ItemTemplate不能包含多个内容:(

2 个答案:

答案 0 :(得分:2)

当我怀疑您的DataTemplates包含Views时,ScreenViewModelCollection适用于ViewModels

您只需将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>

答案 1 :(得分:0)

我想念redScreenView / greenScreenView命名空间的定义,ScreenViewModelCollection的类型,ItemsControl.ItemTemplate的xaml - 所以我假设:

编辑:请看看你的xaml我认为你有一些错别字。 DataTemplates的 DataType 应该是viewmodel。数据的内容当然是视图。

然而 local 定义了命名空间,必须在你的window / usercontrol定义中。 e.g。

 <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能为你工作吗?