Frage

Ich bin modifiziert eine Windows-App das benutzt System.Windows.Control UI-Elemente,
Ich möchte, dass der Benutzer ein Element aus einer Hierarchie auswählt, also etwas, das so aussieht:

tree

Außer dass es sich nicht um Ordner handelt, sondern um eine riesige Hierarchie von Remote-Objekten, die sehr tief und langsam abzurufen sind.
Das Laden der gesamten Hierarchie vor dem Anzeigen wäre zu langsam, ich muss die erste Ebene anzeigen und dann in einem Ordner anzeigen, wenn der Benutzer darauf klickt.

Ich denke daran, ein zu verwenden System.Windows.Control.TreeView und Abfangen von Auswahlereignissen auf TreeViewItem elemente, um sie bei Bedarf zu füllen.
FRAGE: Ist es die Best-Practice-Strategie oder gibt es eine System.Windows.Control UI-Element, das dafür besser geeignet ist?

Eine Komponente, die den Inhalt jedes Ordners des angeklickten Elements liest, wäre ebenfalls akzeptabel.
Die App verwendet .NET 4.5.

War es hilfreich?

Lösung

Wenn ich das richtig verstehe, möchten Sie, dass untergeordnete Knoten nur geladen werden, wenn der übergeordnete Knoten erweitert wird (z.durch Klicken auf das Erweiterungssymbol).Das Laden von Kindern bei der Knotenerweiterung klingt aus UX-Sicht in der Tat besser als das Laden bei der Knotenauswahl.

Mir ist nichts bekannt, was das sofort macht, aber Sie können ganz einfach selbst eines bauen.Der Ansatz, den ich dafür gesehen habe, ist das Hinzufügen eines dummy-Knoten überprüfen Sie unter jedem Knoten, dessen untergeordnete Knoten noch nicht abgerufen wurden, und im Ereignishandler zum Erweitern eines Knotens, ob er einen Dummy-Knoten hat, und laden Sie in diesem Fall seine tatsächlichen untergeordneten Knoten und ersetzen Sie den Dummy durch sie.

Der Dummy-Knoten bewirkt, dass sein übergeordneter Knoten erweiterbar erscheint (z.haben Sie ein '+' -Symbol oder ein zusammengeklapptes Dreieck), was wahrscheinlich das ist, was Sie brauchen.Wenn Sie "(Laden...)" oder einige wie der Titel des Dummys, erhalten Sie eine anständige Benutzererfahrung daraus.

Andere Tipps

1) Erstellen Sie die Baumansicht:

System.Windows.Controls.TreeView treeView = new System.Windows.Controls.TreeView();
ContentCanvas.Children.Add(treeView);

2) Fügen Sie die Stammelemente ein:

System.Windows.Controls.TreeViewItem root = new System.Windows.Controls.TreeViewItem();
root.Header = repository;
treeView.Items.Add(root);

3) Wenn ein Element ausgewählt ist, fügen Sie nach Bedarf Unterelemente hinzu:

treeView.SelectedItemChanged += delegate
{
    TreeViewItem item = (TreeViewItem)treeView.SelectedItem;
    SparkleLogger.LogInfo("bla", "object:"+item);
    System.Windows.Controls.TreeViewItem subItem = new System.Windows.Controls.TreeViewItem();
    subItem.Header = "hello";
    item.Items.Add(subItem);
};

Das Hinzufügen darf nur bei der ersten Auswahl erfolgen, da sonst Elemente dupliziert werden.
Jede bessere Lösung wäre herzlich willkommen!

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