私は典型的なツリービューとビューモデルを持っています。ビューモデルには、ツリーのデータソースとして機能する他のビューモデルの監視可能なコレクションがあります。
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のKeyBinding(およびICommand / RelayCommandをItemVMからTreeViewVMに移動)がすべてうまくいくと、コマンドが呼び出されます。
しかし、私はItemVMでコマンドを実行したいと思います(それが理にかなっている場所です)。何か案は?