У меня типичная древовидная структура и модель представления.Модель представления имеет наблюдаемую коллекцию других моделей представления, которая служит источником данных для дерева.
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.
Если переместить связывание клавиш в TreeView.InputBindings (и ICommand / RelayCommand из ItemVM в TreeViewVM), все будет хорошо, команда будет вызвана.
Но я хотел бы иметь команду на ItemVM (так как именно там, где это имеет смысл).Есть идеи?