41

我有一堂课FruitViewModel。它描述了项目的 ViewModel ListBox

<ListBox ItemsSource="{Binding Fruits}">

我有

class BananaViewModel : FruitViewModel

class AppleViewModel : FruitViewModel

Fruits包含BananaViewModels 和AppleViewModels 绑定到ItemsSource

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

4

2 回答 2

79

您可以通过指定DataType不带x:Key. 使用这种方法,您无需分配任何东西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>
于 2010-10-23T01:59:24.980 回答
3

在 XAML 中的 ListView 上,您可以声明一个ItemTemplateSelector. 此值将来自静态资源或类似资源。

您的模板选择器的实现应该实现DataTemplateSelector并且基本上包含“if”语句,该语句根据绑定项的类型选择正确的 DataTemplate。它可能会从传入的容器资源中找到 DataTemplate(可能使用该FindResource函数)。

编辑:好的链接也许?http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a-datatemplateselector 死链接。

于 2010-10-22T23:03:19.227 回答