Commutateur ListBox ItemTemplate en fonction à la fois sur le type d'élément et l'option Affichage
-
30-10-2019 - |
Question
J'implémente actuellement une liste de list dans WPF qui aura 2 dispositions alternatives pour ses éléments:
Jusqu'à présent, j'ai fait cela en utilisant un DataTrigger
Pour changer le ItemTemplate
pour le ListBox
Et ça marche bien:
<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>
Cependant, le Runs
la collection à laquelle la liste est liée contiendra également les types de l'objet:
interface IRunItem
{
// ...
}
class CompletedRunItem : IRunItem
{
// ...
}
class PendingRunItem : IRunItem
{
// ...
}
Chacun des types d'objets doit avoir ses propres modèles «carreaux» et «icônes» (fabriquant 4 modèles au total). Quelle est la meilleure façon d'allumer ces deux propriétés selon le booléen ShowRunsAsIcons
Et le type de l'élément de liste?
J'ai envisagé d'utiliser une paire de DataTemplateSelector
Sous-classes - une à choisir entre les modèles de carreaux en fonction du type d'article, et un à choisir entre les modèles d'icônes en fonction du type d'article - mais cela semble horriblement maladroit. J'ai l'impression que je devrais profiter de la capacité de WPF à choisir le modèle correct en fonction du type de l'objet, mais dans ce cas, je ne vois pas comment combiner cela avec les différentes options de vue de la liste.
Des idées sur la façon de faire cela qui est plus dans l'esprit de WPF?
Merci.
Pas de solution correcte