Ich habe eine typische Treeview und ein Viewmodel. Das Ansichtsmodell enthält eine beobachtbare Sammlung anderer Ansichtsmodelle, die als Datenquelle für den Baum dienen.KeyBinding auf einem TreeViewItem
public class TreeViewVM {
public ObservableCollection<ItemVM> Items { get; private set; }
public ItemVM SelectedItem { get; set; }
}
und die ItemVM:
public class ItemVM {
public string Name { get; set; }
public ImageSource Image { get; private set; }
public ObservableCollection<ItemVM> Children { get; private set; }
public ICommand Rename { get; private set; }
}
Aussicht:
<TreeView Selecteditem="{Binding SelectedItem}" ItemsSource="{Binding Items}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate>
<StackPanel Orientation="Horizontal">
<StackPanel.InputBindings>
<KeyBinding Key="F2" Command="{Binding Rename}"/>
</StackPanel.InputBindings>
<Image Source="{Binding Image}"/>
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
Allerdings wird mein Befehl nicht egal aufgerufen werden, was ich versuche, so lange, wie es ist "innen" die HierarchicalDataTemplate .
Wenn ich die KeyBinding in der TreeView.InputBindings (und der ICommand/RelayCommand von der ItemVM in die TreeViewVM) alles ist schön, wird der Befehl aufgerufen.
Aber ich hätte gerne den Befehl auf der ItemVM (wie es ist, wo es Sinn macht). Irgendwelche Ideen?
Gut, danke! –
Das hat super für mich funktioniert. Danke, dass du auf ** SelectedItem ** hingewiesen hast. –
@MartinLiversage, bitte, siehe meine Frage http://stackoverflow.com/questions/36865204/keybinding-in-hierarchicaldatatemplate-of-treeview – StepUp