Ich habe eine Daten gebunden TreeView
und ich möchte SelectedItem
binden. This attached behavior funktioniert perfekt ohne HierarchicalDataTemplate
, aber damit funktioniert das angehängte Verhalten nur in eine Richtung (UI zu Daten) nicht die andere, denn jetzt e.NewValue
ist MyViewModel
nicht TreeViewItem
.Binding SelectedItem in einem HierarchicalDataTemplate-WPF TreeView
Dies ist ein Code-Schnipsel aus dem beigefügten Verhalten:
private static void OnSelectedItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
var item = e.NewValue as TreeViewItem;
if (item != null)
{
item.SetValue(TreeViewItem.IsSelectedProperty, true);
}
}
Das ist meine TreeView
Definition lautet:
<Window xmlns:interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
<TreeView ItemsSource="{Binding MyItems}" VirtualizingStackPanel.IsVirtualizing="True">
<interactivity:Interaction.Behaviors>
<behaviors:TreeViewSelectedItemBindingBehavior SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
</interactivity:Interaction.Behaviors>
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:MyViewModel}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</Window>
Wenn ich einen Verweis auf die TreeView
in der beigefügten Verhalten Methode erhalten kann OnSelectedItemChanged
, vielleicht kann ich die Antworten in this question verwenden, um die TreeViewItem
zu bekommen, aber ich weiß nicht, wie man dorthin kommt. Weiß jemand wie und ist es der richtige Weg?
wie kann ich GetVisualDescendant Methode verwenden? Ich habe einen Verweis auf PresentationFramework hinzugefügt, kann aber immer noch nicht verwenden? Was ich vermisse? – Lukas
Die GetVisualDescendant-Methode ist eine Erweiterungsmethode, die in den Utils einer Drag-and-Drop-Implementierung (https://gong-wpf-dragdrop.googlecode.com/svn-history/r29/branches/jon/GongSolutions.Wpf.DragDrop verwendet wird /Utilities/VisualTreeExtensions.cs), dort habe ich es trotzdem gefunden. – Xtr
Funktioniert wie ein Charme. Sehr gute Lösung, um schlechte MVVM-Funktionen des TreeView Control zu erweitern. –