C# 键绑定标签
我有一个具有以下定义的树视图:C# 键绑定标签,c#,wpf,inputbinding,C#,Wpf,Inputbinding,我有一个具有以下定义的树视图: <TreeView ItemsSource="{Binding Folders, UpdateSourceTrigger=PropertyChanged}" x:Name="tree"> <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding Folders, UpdateSourceTrigger=PropertyChan
<TreeView ItemsSource="{Binding Folders, UpdateSourceTrigger=PropertyChanged}" x:Name="tree">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Folders, UpdateSourceTrigger=PropertyChanged}">
<Label Content="{Binding Name}" >
<Label.InputBindings>
<KeyBinding Key="Delete"
Command="{Binding DataContext.DeleteFolderCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"/>
<MouseBinding MouseAction="LeftDoubleClick"
Command="{Binding DataContext.SelectFolderCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"
CommandParameter="{Binding ElementName=tree, Path=SelectedItem}" />
</Label.InputBindings>
</Label>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
在构造函数中,我定义:
DeleteFolderCommand = new RelayCommand(DeleteFolder);
DeleteFolder方法如下所示:
public ICommand DeleteFolderCommand
{
get { return _deleteFolderCommand; }
set
{
_deleteFolderCommand = value;
OnPropertyChanged();
}
}
private void DeleteFolder(object parameter)
{
// Break-Point here will not be reached
}
我做错了什么
我已经检查了输出窗口中的绑定错误,但是没有任何错误。我通过直接在树视图中处理键绑定来管理它
乍一看,装订看起来还不错。SelectFolderCommand有效吗?DeleteFolderCommand是否与SelectFolderCommand存在于同一个VM中?是的,SelectFolderCommand工作正常。并且DeleteFolderCommand位于同一ViewModel中。此时,您可以检查Delete键是否在任何位置被使用。当您按下Delete键时,该项处于焦点位置。我认为这就是问题所在,label上的keybinding不会将标签包装在contentcontrol上,而是使用contentcontrol上的输入绑定。
<TreeView ItemsSource="{Binding Folders, UpdateSourceTrigger=PropertyChanged}" x:Name="tree">
<TreeView.InputBindings>
<KeyBinding Key="Delete" Command="{Binding DataContext.DeleteFolderCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"/>
</TreeView.InputBindings>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Folders, UpdateSourceTrigger=PropertyChanged}">
<Label Content="{Binding Name}">
<Label.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick"
Command="{Binding DataContext.SelectFolderCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"
CommandParameter="{Binding ElementName=tree, Path=SelectedItem}" />
</Label.InputBindings>
</Label>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>