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)?

War es hilfreich?

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 .. .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top