Mam typowy widok drzewa i viewmodel. Viewmodel ma możliwą do zaobserwowania kolekcję innych modeli wyświetlania, które służą jako źródło danych dla drzewa.KeyBinding na TreeViewItem
public class TreeViewVM {
public ObservableCollection<ItemVM> Items { get; private set; }
public ItemVM SelectedItem { get; set; }
}
i 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; }
}
Widok:
<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>
Jednak moje polecenie nie zostanie wywołany bez względu na to, co staram tak długo, jak to jest "wewnątrz" HierarchicalDataTemplate .
Jeśli przeniesię KeyBinding w TreeView.InputBindings (i ICommand/RelayCommand z ItemVM na TreeViewVM) wszystko jest w porządku, polecenie zostanie wywołane.
Ale chciałbym mieć polecenie na ItemVM (ponieważ jest tam, gdzie ma sens). Jakieś pomysły?
Dobra, dziękuję! –
To zadziałało dla mnie świetnie. Dziękuję za wskazanie ** SelectedItem **. Rename. –
@MartinLiversage, proszę, zobacz moje pytanie http://stackoverflow.com/questions/36865204/keybinding-in-hierarchicaldatatemplate-of-treeview – StepUp