Tengo una vista de árbol típica y un modelo de vista. El modelo de vista tiene una colección observable de otros modelos de vista que sirven como fuente de datos para el árbol.KeyBinding en TreeViewItem
public class TreeViewVM {
public ObservableCollection<ItemVM> Items { get; private set; }
public ItemVM SelectedItem { get; set; }
}
y la 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 vista:
<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>
Sin embargo, mi comando no será invocado no importa lo que intente, siempre y cuando se trata de "dentro" de la HierarchicalDataTemplate .
Si muevo el KeyBinding en TreeView.InputBindings (y el ICommand/RelayCommand desde el ItemVM al TreeViewVM) todo está bien, el comando se invoca.
Pero me gustaría tener el comando en el ItemVM (ya que es donde tiene sentido). ¿Algunas ideas?
Bueno, gracias! –
Esto funcionó muy bien para mí. Gracias por señalar ** SelectedItem **. Renombrar. –
@MartinLiversage, por favor, consulte mi pregunta http://stackoverflow.com/questions/36865204/keybinding-in-hierarchicaldatatemplate-of-treeview – StepUp