我有一个班级FruitViewModel
。它描述了ListBox
项的ViewModels。
<ListBox ItemsSource="{Binding Fruits}">
我已经
了class BananaViewModel : FruitViewModel
和
class AppleViewModel : FruitViewModel
Fruits
包含与BananaViewModel
绑定的AppleViewModel
和ItemsSource
。
如何为苹果和香蕉制作不同的模板?它们应该在一个列表中,但具有不同的模板
答案 0 :(得分:67)
您可以通过指定DataType
而不是x:Key
来定义适用于特定类型的任何实例的DataTemplates。使用此方法不会为ItemTemplate
指定任何内容 - 模板会自动应用。
<ListBox ItemsSource="{Binding Path=MixedList}">
<ListBox.Resources>
<DataTemplate DataType="{x:Type local:BananaViewModel}">
<TextBlock Text="{Binding Name}" Foreground="Yellow"/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:AppleViewModel}">
<TextBlock Text="{Binding Name}" Foreground="Red"/>
</DataTemplate>
</ListBox.Resources>
</ListBox>
答案 1 :(得分:3)
在XAML中的ListView上,您可以声明ItemTemplateSelector
。此值将来自静态资源或类似。
模板选择器的实现应该实现DataTemplateSelector
,并且基本上包含“if”语句,该语句根据绑定项的类型选择正确的DataTemplate。它可能会从传入的容器资源中找到DataTemplate(可能使用FindResource
函数)。
编辑:好的链接也许? http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a-datatemplateselector 死链接。