Binden möchten ein HierarchicalDataTemplate die ItemsSource-Eigenschaft an ein CollectionViewSource (ausführen, Gruppierung und Filterung)
Das problem: Wir möchten, binden Sie ein HierarchicalDataTemplate die ItemsSource-Eigenschaft an ein CollectionViewSource durchzuführen, Gruppierung und Filterung.
Hintergrund: Die ursprüngliche Frage, die wir arbeiteten, hatte zu tun mit der Filterung ein TreeView. Insbesondere haben wir festgestellt, dass mit einer CollectionViewSource filtern gearbeitet, aber verursacht das TreeView-Knoten zu reduzieren. Es ist wahrscheinlich, weil der Blick auf die Refresh-Funktion regeneriert die Liste der Objekte, die bewirkt, dass die Strukturansicht regenerieren Knoten, wodurch die ursprüngliche Knoten' expansion Staaten verloren. Wir haben dieses Problem gelöst, indem Sie eine Klasse zu schreiben, die ähnlich ist zu CollectionViewSource erhält jedoch die Ansicht durch Bearbeiten der Liste Objekt in Ort, so dass, wenn es änderungen aufgrund der Filterung, die damit verbundenen TreeView-Knoten nicht zerstört.
Dies funktionierte perfekt für uns und wir würden Sie gerne auf tieferen Ebenen in unserem TreeView, bringt uns zurück zu unserem problem. Derzeit haben wir ein HierarchicalDataTemplate, die wie folgt aussieht:
<HierarchicalDataTemplate
x:Key="tableTemplate"
ItemsSource="{Binding Path=DataItems}"
ItemTemplateSelector="{StaticResource tableGroupsTemplateSelector}"
>
Statt, wir wollen, dass es sich so Verhalten:
<HierarchicalDataTemplate
x:Key="tableTemplate"
ItemTemplateSelector="{StaticResource tableGroupsTemplateSelector}"
>
<HierarchicalDataTemplate.ItemsSource>
<Binding>
<Binding.Source>
<CollectionViewSource
Source="{Binding Path=DataItems}"
/>
</Binding.Source>
</Binding>
</HierarchicalDataTemplate.ItemsSource>
Leider ist dieser Ansatz nicht zu funktionieren scheint. Von dem, was wir sagen können, die Bindung innerhalb des CVS wird nie ausgelöst; keine Bindung-Fehler ausgelöst werden; wir haben versucht, das anbringen einer Konverter und setzen Sie einen Haltepunkt, aber der Haltepunkt nie erreicht. Wir haben auch versucht verschiedene andere Lösungen, einschließlich: mit RelativeSource, bewegen Sie die CollectionViewSource in den template-Ressourcen, und die Einbeziehung TreeViewItem ist in die Vorlage. Jedoch hat nichts geklappt.
Nebenbei, mir ist klar, dass eine ViewModel-Ansatz ermöglichen würde Filterung. Allerdings bin ich an einer Stelle in unserem Entwicklungszyklus, wo kann ich nicht machen, die Art von Veränderung, ich bin auf der Suche nach alternativen, wie die CollectionViewSource Ansatz.
Jede Hilfe, die Sie geben können wäre dankbar.
Dank,
-Craig
Du musst angemeldet sein, um einen Kommentar abzugeben.
In meinen Anwendungen habe ich festgestellt, dass der einfachste Weg, das zu erreichen-Baum-Ansicht-Filterung wird durch die Bindung die Sichtbarkeit einer Eigenschaft auf die aufgelisteten Objekte.
Dieser Ansatz kann nicht für Sie arbeiten, aber wenn Sie möchten, es zu versuchen, hier ist ein Beispiel dafür, was ich getan habe.
In der Strukturansicht die Ressourcen, die Sie hinzufügen Stil Auslösen. Sie können binden Sie den Auslöser, um jede Eigenschaft der Objekte, Ihre Anzeige, und Sie können hinzufügen, in einer Wert-Konverter, wenn Sie wollen, fügen Sie einige Logik-untersuchen Sie den Artikel und entscheiden, ob es angezeigt werden soll oder nicht.
Den Auslöser Zusammenbruch der treeView-Element, wenn die "Display" - Eigenschaft false ist.
Zu vermeiden Zugabe eine "Display" - Eigenschaft, um Ihre Objekte, können Sie Folgendes tun:
Und in den TreeView-Stil-Bindung der Wert Konverter:
Brauchen Sie nicht, um den Pfad angeben, wenn Sie wollen, um zu überprüfen das gesamte Objekt.
Diese Methode schien zu funktionieren am besten für mich, es zu versuchen.