<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不能包含多个内容:(
答案 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能为你工作吗?