В настоящее время я реализующий ListBox в WPF, который будет иметь два альтернативные макеты для своих элементов:Переключения ListBox 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
коллекцию, в которой список привязан Wi будет также содержать разные типы объекта:
interface IRunItem
{
// ...
}
class CompletedRunItem : IRunItem
{
// ...
}
class PendingRunItem : IRunItem
{
// ...
}
Каждых из типов объектов, должны иметь свою собственную «плитку» и шаблоны «ICON» (изготовление 4 шаблонов в общей сложности). Каков наилучший способ включения этих двух свойств в соответствии с булевым ShowRunsAsIcons
и типом элемента списка?
Я рассмотрел использование подклассов DataTemplateSelector
- один для выбора между шаблонами плитки на основе типа элемента и один для выбора между шаблонами значков на основе типа элемента, но это просто ужасно неуклюже. Мне кажется, что я должен использовать возможности WPF для выбора правильного шаблона на основе типа объекта, но в этом случае я не вижу, как его сочетать с различными вариантами представления списка.
Любые идеи о том, как это сделать, что больше в духе WPF?
Спасибо.