【发布时间】:2010-06-29 16:05:26
【问题描述】:
我有一个典型的树视图和一个视图模型。视图模型有一个可观察的其他视图模型集合,用作树的数据源。
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 上使用命令(因为它是有意义的)。有什么想法吗?
【问题讨论】:
标签: wpf treeview treeviewitem inputbinding key-bindings