TreeView Sync mit SelectedItem im View Model

8

Ich habe ein ViewModel über einem WPF-TreeView-Steuerelement. Ich möchte, dass das ViewModel das SelectedItem aus der TreeView setzen und lesen kann. Die SelectedItem-Eigenschaft der TreeView ist jedoch nicht bindbar.

Ich bin in der Lage, das ausgewählte Element im Code zu setzen und zu erhalten (mit ItemContainerGenerator und TreeViewItem.IsSelected = true), aber das führt zu einer hässlichen Kommunikation zwischen dem Code dahinter und dem ViewModel.

Hat jemand dafür eine saubere Lösung?

    
according2me 12.11.2009, 16:29
quelle

2 Antworten

1

Ich kann ein Beispiel geben. Was ich mache, ist die IsSelected -Eigenschaft von TreeViewItem (nicht die TreeView selbst) im View-Modell zu setzen, weil Sie daran binden können.

In meinem View-Modell habe ich eine Eigenschaft ElementInViewModel , die eine Datenstruktur ist, die selbst einen Baum bildet. Ich verwende ein HierarchicalDataTemplate in meinem Xaml, um es anzuzeigen. Das Datenobjekt selbst hat den Typ YourDomainType und seine untergeordneten Elemente (des gleichen Typs) befinden sich in der Eigenschaft ChildElements .

Im Ansichtsmodell habe ich die Eigenschaft IsExpanded und IsSelected meiner Datenklasse YourDomainType festgelegt. Aufgrund des unten definierten Stils übergeben sie diese Einstellung an TreeViewItem .

Funktioniert das für Sie?

%Vor%     
Martin 04.08.2015 19:42
quelle
0

Sie können eine Art Proxy-Klasse verwenden, um die SelectedItem-Eigenschaft an die In-Eigenschaft und die Out-Eigenschaft an Ihr ViewModel zu binden:

%Vor%     
Andriy Vandych 27.12.2012 11:11
quelle