一个列表框的两个itemtemplates

时间:2010-10-22 22:54:23

标签: wpf listbox itemtemplate

我有一个班级FruitViewModel。它描述了ListBox项的ViewModels。

<ListBox ItemsSource="{Binding Fruits}">

我已经

class BananaViewModel : FruitViewModel

class AppleViewModel : FruitViewModel

Fruits包含与BananaViewModel绑定的AppleViewModelItemsSource

如何为苹果和香蕉制作不同的模板?它们应该在一个列表中,但具有不同的模板

2 个答案:

答案 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 死链接。