Commutateur ListBox ItemTemplate en fonction à la fois sur le type d'élément et l'option Affichage

StackOverflow https://stackoverflow.com/questions/4934259

Question

J'implémente actuellement une liste de list dans WPF qui aura 2 dispositions alternatives pour ses éléments:

Alternative list item styles of wrapping icons and detailed tiles

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top