Le problème: Nous souhaitons lier la propriété ItemsSource d'un HierarchicalDataTemplate à un objet CollectionViewSource pour effectuer un regroupement et un filtrage. L'arrière-plan: Le problème original sur lequel nous travaillions avait à voir avec le filtrage d'un TreeView. Plus précisément, nous avons constaté que l'utilisation d'un filtre CollectionSource pour filtrer fonctionnait mais provoquait le repliement des nœuds TreeView. Cela est probablement dû au fait que la fonction Actualiser de la vue régénère sa liste d'objets, ce qui entraîne la régénération de ses nœuds par TreeView, ce qui entraîne la perte des états d'expansion des nœuds d'origine. Nous avons résolu ce problème en écrivant une classe similaire à CollectionViewSource mais en conservant la vue en éditant la liste d'objets afin qu'elle ne soit pas détruite lorsqu'elle change en raison du filtrage.Essayer de lier la propriété ItemsSource d'un HierarchicalDataTemplate à une CollectionViewSource (pour effectuer le groupage et le filtrage)
Cela a fonctionné parfaitement pour nous et nous aimerions l'utiliser à des niveaux plus profonds dans notre TreeView, ce qui nous ramène à notre problème. À l'heure actuelle, nous avons un HierarchicalDataTemplate qui ressemble à ceci:
<HierarchicalDataTemplate
x:Key="tableTemplate"
ItemsSource="{Binding Path=DataItems}"
ItemTemplateSelector="{StaticResource tableGroupsTemplateSelector}"
>
Au lieu de cela, nous voulons se comporter comme ceci:
<HierarchicalDataTemplate
x:Key="tableTemplate"
ItemTemplateSelector="{StaticResource tableGroupsTemplateSelector}"
>
<HierarchicalDataTemplate.ItemsSource>
<Binding>
<Binding.Source>
<CollectionViewSource
Source="{Binding Path=DataItems}"
/>
</Binding.Source>
</Binding>
</HierarchicalDataTemplate.ItemsSource>
Malheureusement, cette approche ne semble pas fonctionner. De ce que nous pouvons dire, la liaison dans le CVS ne se déclenche jamais; aucune erreur de liaison n'est déclenchée; Nous avons essayé d'attacher un convertisseur et de définir un point d'arrêt, mais le point d'arrêt n'a jamais été atteint. Nous avons également essayé diverses autres solutions, notamment: l'utilisation de RelativeSource, le déplacement de CollectionViewSource dans les ressources du modèle et l'incorporation de TreeViewItem dans le modèle. Cependant, rien n'a fonctionné. En passant, je me rends compte qu'une approche ViewModel permettrait le filtrage. Cependant, je suis à un endroit de notre cycle de développement où je ne peux pas faire ce genre de changement, donc je suis à la recherche d'alternatives, comme l'approche de CollectionViewSource.
Toute aide que vous pouvez donner serait appréciée.
Merci,
-Craig