2010-10-22 14 views
0

J'ai le scénario suivant: WPF Vue arborescente affichant des objets personnalisés, chacun contenant une liste d'enfants. Le problème est donc le suivant: Chacun des objets personnalisés est contrôlé par une zone de liste modifiable qui peut changer l'objet actuel de la classe A à la classe B/C/D et vice versa. Les classes A à D sont toutes des sous-classes d'une superclasse. Jusqu'ici tout va bien. Chaque classe doit être représentée par un Datatemplate spécifique dans l'arborescence WPF, donc à chaque fois, l'utilisateur change la classe d'objet (en utilisant le combo inline) l'élément doit recevoir un nouveau template appliqué. Jusqu'à présent, j'ai essayé:WPF C# change dynamiquement Itemtemplate lorsque la classe d'objets est modifiée

  1. DataTemplate sélecteur de classe (obtient uniquement appliqué au démarrage)
  2. "nulling" DataTemplateSelector dans TreeView et reappling après le changement d'objet (trop lent)
  3. datatemplate par classe (x: Type) (fonctionne, mais j'ai besoin de trois modèles différents par objet, un graphique, un minimum, une largeur d'affichage maximum avec des TextBlocks supplémentaires)
  4. Datatrigger (Je ne sais pas comment le classer dans la classe modifiée)

Peut-être une sorte d'erreur systématique. Votre aide est beaucoup apprécié

Salue

Markus

+0

J'irais avec l'option 3. c'est la plus fiable – Dbl

Répondre

0

La dernière solution est la meilleure façon d'aller (DataTemplate sur datatype) mais dans votre DataTemplate définir le contenu à un ContentControl avec un DataTrigger sur le style propriété. remplacer le modèle de contrôle en fonction de votre précondition de déclenchement. Alternativement, vous pouvez envisager un modèle hiérarchique.