Laden...

WPF Im hierarchical Treeview ein Root-Node einblenden / anzeigen

Erstellt von m.grauber vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.229 Views
M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 8 Jahren
WPF Im hierarchical Treeview ein Root-Node einblenden / anzeigen

Hallo,

über ein hierarchical WPF-Treeview...

(IEnumerable<HierarchyNode<TEntity>> CreateHierarchy<...)

...werden alle Werte mit 0 bzw. leerer Guid immer direkt "als erstes" angezeigt. Es gibt daher mehrere Root-Werte:

+Eintrag1 (ID=0 bzw. Guid=leer)
+Eintrag 1a (ID=1 bzw. Guid=73932...)
+Eintrag2 (ID=0 bzw. Guid=leer)

die ID bzw. Guid-Werte kommen aus einer Tabelle und können dort nicht verändert werden. Für Eintrag1 und Eintrag2 ist das (ID=0 bzw. Guid=leer).

Es soll aber nun ein übergeordnetes Root-Node angezeigt werden und erst daran die beiden Einträge mit der ID=0 bzw. leeren Guid:

+Root-Eintrag
+Eintrag1 (ID=0 bzw. Guid=leer)
+Eintrag 1a (ID=1 bzw. Guid=73932...)
+Eintrag2 (ID=0 bzw. Guid=leer)

Wenn ich nun in meine ObservableCollection, die die zwei Einträge enthält einen weiteren Eintrag "Root-Eintrag" mit ID=0 bzw. Guid=leer einfüge, wird es auf der gleichen Ebene angezeigt wie Eintrag1 und Eintrag2.

  • Gibt es beim Treeview eine Möglichkeit den Root-Eintrag sichtbar zu machen (z. B. Treeview.ShowRootNode=true, ohne dass ich die ID bzw. Guid-Werte aller Einträge in der Tabelle ändern muss? (- was ich leider nicht darf)

Null funktioniert als ID bzw. Guid leider nicht.

Direkt nachdem die Werte in das Treeview gefüllt werden, ist ja nichts ausgewählt. Dieses "Nichts" könnte evtl. sichtbar gemacht werden?

🤔

Danke!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

P
157 Beiträge seit 2014
vor 8 Jahren

Hallo,

die entitäten direkt an die ansicht weiter zu geben, bringt einige schwierigkeiten mit sich, wenn es um anzeigen geht. ich verwende für solche fälle eine einfache wrapper-klasse, welches mein datenobjekt und einige eigenschaften enthält, die ich an die entsprechenden controls binden kann, damit habe ich die möglichkeit bestimmte verhaltensweisen zu steuern ... zb IsSelected oder ähnliches.

die manipulation des treeview-controls aus dem code behind ist sehr stark eingeschränkt, da wpf auf einer andere technischen idee basiert, als winforms, die alternative ist du verwendest entsprechend trigger in deinem datatemplate.

Wenn's zum weinen nicht reicht, lach drüber!

T
461 Beiträge seit 2013
vor 8 Jahren

??

Fürs leichtere Verständis denk ich:



// Source vom TreeView
public ObservableCollection<MyEntity> MyEntities {get; set;}

public class MyEntity
{

    public string EntityText {get; set;}

    public bool IsSelected {get; set;}

    public bool IsExpanded {get; set;}

    public ObservableCollection<MyEntity> SubEntities {get; set;}

}


Um jetzt einen übergeordneten Eintrag hinzuzufügen, müßtest einfach ein neues 'MyEntity' erstellen und unter 'SubEntities' die 2 leeren Einträge von dir einfügen. Das sollte es normal gewesen sein.

An den Daten selbst müßtest normal nichts ändern müssen...

Hoffe ich hab das richtig verstanden... 😃

Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 8 Jahren

Hallo Parso und Hallo Thomas!

Danke vielmals für die Lösungsansätze! 👍 👍

Ich bin erst jetzt vom Kunden zurück. Inzwischen habe ich es durchgeboxt, daß nun doch die Root-Werte in die DB eingefügt werden dürfen. Ich ändere daher die IDs der derzeit ersten Einträge direkt in der Datenbank. Gut das das nun doch klappt, ansonsten müsste ich die anderen Lösungswege gehen.

Schöne Grüße!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]