我目前正在 WPF 中实现一个列表框,它将为其项目提供 2 种替代布局:
到目前为止,我已经使用 aDataTrigger
来切换ItemTemplate
forListBox
并且运行良好:
<ListBox ItemsSource="{Binding Runs}" SelectedItem="{Binding SelectedRun}">
<ListBox.Style>
<Style TargetType="ListBox">
<Setter Property="ItemTemplate" Value="{StaticResource tileTemplate}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ShowRunsAsIcons}" Value="True">
<Setter Property="ItemTemplate" Value="{StaticResource iconTemplate}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.Style>
</ListBox>
但是,Runs
列表绑定到的集合也将包含不同类型的对象:
interface IRunItem
{
// ...
}
class CompletedRunItem : IRunItem
{
// ...
}
class PendingRunItem : IRunItem
{
// ...
}
每个对象类型都应该有自己的“平铺”和“图标”模板(总共制作 4 个模板)。根据布尔值ShowRunsAsIcons
和列表项的类型切换这两个属性的最佳方法是什么?
我考虑过使用一对子DataTemplateSelector
类——一个根据项目类型在图块模板之间进行选择,一个根据项目类型在图标模板之间进行选择——但这感觉非常笨拙。我觉得我应该利用 WPF 根据对象类型选择正确模板的能力,但在这种情况下,我不知道如何将它与列表的不同视图选项结合起来。
关于如何做到这一点的任何想法更符合 WPF 的精神?
谢谢。