J'ai une arborescence typique et un viewmodel. Le modèle de vue possède une collection observable d'autres modèles de vue qui sert de source de données pour l'arbre.KeyBinding sur un TreeViewItem
public class TreeViewVM {
public ObservableCollection<ItemVM> Items { get; private set; }
public ItemVM SelectedItem { get; set; }
}
et 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; }
}
La vue:
<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>
Cependant ma commande ne sera pas invoqué, peu importe ce que j'essaie aussi longtemps qu'il est "dans" l'HierarchicalDataTemplate .
Si je déplace le KeyBinding dans TreeView.InputBindings (et ICommand/RelayCommand de ItemVM vers TreeViewVM) tout est sympa, la commande est invoquée.
Mais je voudrais avoir la commande sur le ItemVM (car c'est là où c'est logique). Des idées?
Bon, merci! –
Cela a fonctionné très bien pour moi. Merci de signaler ** SelectedItem **. Renommer. –
@MartinLiversage, s'il vous plaît, voir ma question http://stackoverflow.com/questions/36865204/keybinding-in-hierarchicaldatatemplate-of-treeview – StepUp