У меня есть типичный treeview и viewmodel. viewmodel имеет заметный набор другого viewmodels, который служит источником данных для дерева.
public class TreeViewVM {
public ObservableCollection<ItemVM> Items { get; private set; }
public ItemVM SelectedItem { get; set; }
}
и 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; }
}
Представление:
<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>
Однако моя команда не будет вызвана независимо от того, что я пробую, пока это "в" HierarchicalDataTemplate.
Если я перемещаю KeyBinding в TreeView. InputBindings (и ICommand / RelayCommand от ItemVM до TreeViewVM) все хорошо, команда вызывается.
Но я хотел бы иметь команду на ItemVM (как это - где это имеет смысл). Какие-либо идеи?