Bonjour à tous,
Je cherche actuellement à recréer une sorte d'explorateur de solution comme on peut le voir sur Visual Studio. J'essaye pour cela de respecter le pattern MVVM, même si je fais tout à la main, sans framework.
Pour me simplifier la vie côté TreeView, j'ai créé une VM TreeViewItemViewModel (MVVM, c'est pas mal pour s'entraîner à la dactylographie ), qui me permet de gérer notamment la sélection de l'item et le lazy loading. Bref, du classique.
Cependant, lorsque que je souhaite ensuite créer une autre VM qui dérive de cette première VM, mes templates WPF se "perdent" un peu : en effet, si je déclare un style pour le type dérivé, celui-ci est simplement ignoré. Je suis obligé de déclarer le style sur le type parent, ce qui casse bien entendu tout le système.
Par exemple, avec le code suivant (PhysicalProjectFolderViewModel dérive de ProjectContainerViewModel):
Seul le template de ProjectContainerViewModel est pris en compte, même si je fournis bien un objet de type PhysicalProjectFolderViewModel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <HierarchicalDataTemplate DataType="{x:Type ViewModels:ProjectContainerViewModel}" ItemsSource="{Binding Children}"> <StackPanel Orientation="Horizontal"> <Image Source="..." Margin="2" /> <TextBlock Text="{Binding Name}" /> </StackPanel> </HierarchicalDataTemplate> <HierarchicalDataTemplate DataType="{x:Type ViewModels:PhysicalProjectFolderViewModel}" ItemsSource="{Binding Children}"> <TextBlock Text="{Binding Name}" /> </HierarchicalDataTemplate>
J'ai un peu parcouru le web pour trouver une solution, mais la seule que j'ai pu trouvé consiste à utilise un DataTemplateSelector. Dans la mesure où cette solution ne me paraît très "propre"...
Est-ce donc que je m'y prends mal, ou existe-t-il une méthode recommandé pour signaler à WPF qu'il doit considérer l'héritage pour le templating ?
Merci d'avance pour vos réponses
EDIT : Je me suis trompé de catégorie en postant Merci au modérateur qui pourra déplacer mon sujet dans la section WPF.
Partager