TreeViewItem上的KeyBinding
我有一个典型的树视图和视图模型。 viewmodel有一个可观察的其他视图模型集合,用作树的数据源。
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(以及从ItemVM中的ICommand / RelayCommand移动到TreeViewVM)都很好,则会调用该命令。
但我想在ItemVM上使用命令(因为它是有意义的)。有任何想法吗?
没有找到相关结果
已邀请:
2 个回复
畦桨存灯
艰管垮淮
通过
属性跟踪所选项目,则可以在
上定义
,并且仍然在
上执行命令:
注意如何使用子属性语法
来使用
作为绑定的来源。 不幸的是,绑定到
上的所选项目有点单调乏味。你不能直接绑定到
(正如你的XAML似乎暗示的那样)但是存在各种方法来克服这个限制。我喜欢的一个简单方法是使用Blend Interativity:
你必须在
上实施一个
来设置属性
。