根据ViewModel类型为ItemsControl选择DataTemplate

nuc*_*eet 1 c# wpf xaml mvvm

我尝试ItemsControl使用不同的模板制作我的显示项目,具体取决于其viewModel类型.初看起来我认为它可以像我们通常那样做ContentControl:

 <ItemsControl ItemsSource="{Binding MyViewModelCollection}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate DataType="{x:Type myNameSpace:myViewModel1}">
                     <myNameSpace:myControl2/>
                </DataTemplate>
                <DataTemplate DataType="{x:Type myNameSpace:myViewModel2}">
                     <myNameSpace:myControl2/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
Run Code Online (Sandbox Code Playgroud)

但不幸的是,你不能有两个DataTemplateItemsControl.ItemTemplate.我发现了一个小技巧.

Fra*_*tyx 6

在您的XAML代码中只需替换ItemsControl.ItemTemplate标记ItemsControl.Resources,它应该工作.

<ItemsControl ItemsSource="{Binding MyViewModelCollection}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.Resources>
        <DataTemplate DataType="{x:Type myNameSpace:myViewModel1}">
             <myNameSpace:myControl2/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type myNameSpace:myViewModel2}">
             <myNameSpace:myControl2/>
        </DataTemplate>
    </ItemsControl.Resources>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)