Wie würde ich die TreeView-Auswahl in einem WPF-TreeView löschen? Ich habe versucht, das TreeNodes
durchzulaufen und die IsSelected
-Eigenschaft zu löschen, aber das ist eine ReadOnly
-Eigenschaft. Irgendwelche Ideen?
Die TreeView
verwendet die XML-Bindung über das XMLDataProvider
-Objekt.
Ich stieß auf genau die gleichen Probleme und schrieb den folgenden Code, der in jeder Baumansicht funktioniert, mit nur einem einzigen Zeilenaufruf an die erste Funktion.
%Vor%Nicht sicher, was Sie mit TreeNodes meinen.
Normalerweise hätten Sie eine entsprechende IsSelected
-Eigenschaft in Ihrem Ansichtsmodell, an die Ihre Ansicht gebunden ist:
Daher würden Sie einfach die Datenelemente in Ihrem Ansichtsmodell durchlaufen und IsSelected = false
dort festlegen.
Es klingt jedoch so, als hätten Sie keine solche Eigenschaft. In diesem Fall müssen Sie für jedes Datenelement die entsprechende TreeViewItem
ermitteln. Informationen dazu finden Sie in der Eigenschaft TreeView.ItemContainerGenerator
. Etwas wie:
Es war meine Erfahrung, von den Standardaufrufen von ItemContainerGenerator wegzubleiben, weil sie auf Knoten in einer Tiefe größer als n + 1 fehlschlagen. Ich verwende die folgende Kombination von Erweiterungsmethoden. Die ContainerFromItem-Erweiterungsmethoden stammen aus einem MSDN-Blog und haben bei der Behandlung von TreeView Wunder gewirkt.
%Vor%Dies scheint so weit zu funktionieren, aber ich habe es vor etwa 5 Minuten eingefügt, also benutze es auf eigene Gefahr. Ich wollte im Grunde die Auswahl löschen, wenn der Benutzer innerhalb der Baumstruktur klickt, aber nicht auf einem Baumelement.
%Vor%Ich bin selbst in diese Situation mit einer benutzerdefinierten Tree List View-Implementierung gerannt, nachdem ich lange nach einer Lösung gesucht habe, die für mich funktioniert hat.
Die vollständige Erklärung finden Sie unter Ссылка
Die Grundidee ist, dass Sie das Ereignis TreeViewItem.Selected
erfassen und die Quelle des Ereignisses im Attribut Tag
in Ihrem TreeView speichern. Wenn Sie es dann löschen müssen, können Sie auf das Attribut Tag
auf Ihrem Steuerelement zugreifen und den IsSelected
-Wert auf False festlegen. Dies funktioniert für mich mit 2 Ebenen von verschachtelten Kindern. Hoffentlich wird es für Sie arbeiten.
Aus Gründen der Nachhaltigkeit:
TreeView-Deklaration
%Vor%Ereignishandler
%Vor%Auswahllogik löschen
%Vor%