wpf - 一个列表框有两个项目模板

标签 wpf listbox itemtemplate

我有一个类FruitViewModel。它描述了 ListBox 项的 ViewModel。

<ListBox ItemsSource="{Binding Fruits}">

我已经有了

class BananaViewModel : FruitViewModel

class AppleViewModel : FruitViewModel

Fruits 包含绑定(bind)到 ItemsSourceBananaViewModelAppleViewModel

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

最佳答案

您可以通过指定不带 x:KeyDataType 来定义适用于特定类型的任何实例的 DataTemplate。使用此方法,您无需向 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>

关于wpf - 一个列表框有两个项目模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4001535/

相关文章:

WPF Stretch ListBox Height 100% of Grid.Row?

VBA Excel 用多列填充列表框

c# - 禁用 ReactiveUI ItemsView.ItemTemplate Hook

c# - ItemTemplate 中的 WPF 绑定(bind)有效但会产生错误消息

.net - Visual Studio 2008 中缺少工作流项目模板

wpf - 如何将序列号添加到行标题

C# WPF)动态添加控件时有时会缺少DropShadowEffect

c# - ASP.NET MVC : populate (bind data) in listbox

c# - 控件如何处理该控件外的鼠标单击?

带有用户控件的 WPF 列表框作为 ItemTemplate DataTemplate 绑定(bind)问题