DataTemplate d'une ListBox dans un UserControl
Bonjour,
Je dois créer une application qui me permet de construire une IHM,
1 - J'ai crée un UserControl "ScreenBaseInfos" qui contient, entre autre, une ListBox.
Cette ListBox est "bindée" à une collection d'objets graphiques, "ScreenBaseObjectsCollection", qui représente les éléments de mon IHM.
Ces objets graphiques peuvent être des images ou des textes : suivant leur type, ils sont affichés differemment dans la ListBox grâce aux DataTemplates (Une image pour les images, un texte pour les textes..:ccool:)
2 - Seulement, ces objets graphiques appartiennent également à une page graphique. Ils possèdent donc une propriété "GraphicObject_PageInfo" = "Background" ou Foreground".
Au niveau de l'interface, je crée donc deux instances de mon UserControl "ScreenBaseInfos", une pour contenir les objets graphiques possédant la propriétés "Background" et l'autre pour contenir les objets graphiques possédant la propriétés "Foreground".
J'ai donc rajouté également une propriété "ScreenBaseInfos_PageInfo" à "ScreenBaseInfos" informée au moment de la création de mes instances.
Ces deux instances sont donc "bindées" à la même collection d'objets graphiques.
Ce que je souhaite, c'est que si la propriété "ScreenBaseInfos_PageInfo" = "Background", seuls les objets graphiques (images ou textes) de la collection possédants la propriété "GraphicObject_PageInfo" = "Background" soient affichées dans ma ListBox (idem pour la deuxième instance "Foreground").
En gros, j'ai l'impression que sur ma classe de base, "ScreenBaseInfos", j'ai déjà un dataTemplateSelector pour la ListBox mais lorsque je crée des instances, il faut que je surcharge ces dataTemplates en fonction d'une propriété du "contenant" de la ListBox...
Et ça, je sais pas faire...
Je vous remercie si vous m'avez lu jusqu'au bout...
Je vous remercie d'avance pour votre aide.
Surcharge d'un dataTemplate.
Bonjour,
J'affine un peu la demande faite dans mon précédent post car je n'arrive pas à trouver de solution à mon problème.
Je dois créer une application qui me permet de construire une IHM,
J'ai crée un UserControl "ScreenBaseInfos" qui contient, entre autre, une ListBox.
La ListBox est "bindée" à une collection d'objets graphiques, "ScreenBaseObjectsCollection", qui représente les éléments de mon IHM.
Ces objets graphiques peuvent être des images ou des textes : suivant leur type, ils sont affichés differemment dans la ListBox grâce aux DataTemplates (Une image pour les images, un texte pour les textes..)
Code:
1 2 3 4 5 6 7 8 9 10 11
|
<UserControl>
<StackPanel>
<Border>
<Label Name="IHM_ScreenBaseInfos_HeaderLabel"/>
</Border>
<ListBox Name="DBE_ScreenBaseInfos_ListBox" ItemsSource="{Binding}"
ItemsPanel="{StaticResource ScreenBaseInfos_ItemsPanelTemplate}"
ItemTemplateSelector="{StaticResource ScreenBaseInfos_DataTemplateSelector}"/>
</StackPanel>
</UserControl> |
Seulement, ces objets graphiques appartiennent également à une page graphique. Ils possèdent donc une propriété "GraphicObject_PageInfo" = "Background" ou Foreground" et je souhaite visualiser leurs infos dans deux UserControls différents.
Dans mon application principale, uu niveau de l'interface, je crée donc deux instances de mon UserControl "ScreenBaseInfos", une pour contenir les objets graphiques possédant la propriétés "Background" et l'autre pour contenir les objets graphiques possédant la propriétés "Foreground".
J'ai donc rajouté également une propriété "ScreenBaseInfos_PageInfo" à "ScreenBaseInfos" informée au moment de la création de mes instances.
Code:
1 2 3 4 5 6 7
|
<DockPanel>
<dbe:ScreenBaseInfos Name="ScreenBaseBackgroundInfos_UserControl"
ScreenBaseInfos_PageInfo="Background"/>
<dbe:ScreenBaseInfos Name="ScreenBaseForegroundInfos_UserControl"
ScreenBaseInfos_PageInfo="Foreground"/>
</DockPanel> |
Ces deux instances sont donc "bindées" à la même collection d'objets graphiques.
Code:
1 2 3
|
ScreenBaseBackgroundInfos_UserControl.DataContext = CurrentScreenBase.ScreenObjectsCollection;
ScreenBaseForegroundInfos_UserControl.DataContext = CurrentScreenBase.ScreenObjectsCollection; |
Dans ScreenBaseBackgroundInfos_UserControl, je ne veux afficher que les ScreenObjects possédand la propriété "Background" (idem pour ScreenBaseForegroundInfos_UserControl).
Comment faire cela? J'ai bien regardé du coté des ObjectCollectionView, mais je n'ai pas vu comment les utiliser dans ce cas...
Je vous remercie d'avance!!