wpf erzeugen manuell TreeViewItem Behälter
-
30-09-2019 - |
Frage
Ich erstelle ein TreeView zur Laufzeit. Es hat mehrere Knoten (TreeViewItem), von denen jeder einen Namen. Am Anfang ist es zusammenbrach. Ein separater comboBox zeigt die Namen aller TreeViewItem. Ich habe einen TreeViewItem markieren basierend auf den Namen ausgewählt. Ich verwende eine rekursive Funktion und erhält den TreeViewItem Behälter wie folgt aus:
if (parent.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
continue;
TreeViewItem container = parent.ItemContainerGenerator.ContainerFromItem(child).As<TreeViewItem>();
aber es ist
parent.ItemContainerGenerator.Status = GeneratorStatus.NotStarted
Für alle die minimierten Elemente. Wie kann ich generieren Behälter für sie manuell (Ohne sie erweitert)?
Lösung
Immer, finden Sie sich die visuelle Struktur Gehen Sie ernsthaft über den Aufbau einer View-Modell denken sollte.
die Ansicht Modell kann, ohne sich Gedanken über die Art der Fragen, die die treeviews Funktionalität erhöhen Sie konfrontiert sind.
Das View-Modell für Ihre Anwendung würde ein paar zusätzlichen Eigenschaften
IsSelected
IsExpanded
IsHighlighted
als auch Ihre
Data
dann würden Sie binden die IsSelected, IsHighlighted und IsExpanded zum TreeViewItem (ein ItemContainerStyle verwenden), dann, wie Sie eine Sammlung dieser Ansicht Modelle hatten Sie Ihre Suche auf dem View-Modell tun konnte, und nur die Eigenschaft IsHighlighted gesetzt. Die Ansicht Modell würde dann antworten und wegen dem Stil der Bindung würde es den TreeViewItem markieren, wenn man wollte. Es könnte auch funky stuff tun wie alle Knoten oben erweitern. Die Baumansicht auf diese reagieren.
Die Ansicht Modell, wenn sie mit einem treeview kombiniert wird, gibt viel mehr Flexibilität und stoppt diese visuellen Struktur kriechen Übungen (die ein Hack sind, und das Gefühl schmutzig)
Hier ist ein guter Artikel über das Ansichtsmodell und der TreeView .. .