我目前正在实施的WPF列表框,将有2替代布局的项目视图选项切换列表框的ItemTemplate:基于两个项目的类型和
到目前为止,我已经做到了这一点使用DataTrigger
切换ItemTemplate
为ListBox
和它的工作很好:
<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的精神?
谢谢。