WPF根据属性更改绑定命令的键绑定?

时间:2017-01-20 05:43:08

标签: .net wpf xaml mvvm

我有一个xaml窗口,我希望将Escape key绑定到视图模型中的不同命令,具体取决于布尔属性的值。

IsSearching == true,绑定到CancelSearch命令

IsSearching == false,绑定到关闭命令。

如果没有代码,有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

<Window>
 <Window.InputBindings>
     <KeyBinding Command="{Binding SomeCommand}" Key="F5"/>
 </Window.InputBindings>
</Window>
  

这是一种解决方法

private ICommand someCommand;
public ICommand SomeCommand
{
    get
    {
        return someCommand 
            ?? (someCommand = new ActionCommand(() =>
            {

                if(IsSearching)
                   OnCancelExecute();
                else
                   OnCloseExecute();
            }));
    }
}

答案 1 :(得分:0)

您无法直接在XAML中执行所有操作,有时需要一些代码隐藏 如果我不想花费数小时搜索纯XAML解决方案,我就会这样做。

在您的XAML中,为您的密钥绑定(此处为x:Name)提供searchKey
然后在代码隐藏中,在构造函数中添加类似的东西:

public partial class YourView
{
    public YourView()
    {
        InitializeComponent();
        var vm = DataContext as YourViewModel;
        vm.PropertyChanged += (s, e) =>
            {
                if (e.PropertyName != "IsSearching")
                    return;

                searchKey.Command = vm.IsSearching ? vm.SearchCommand : vm.CancelCommand:
            };
    }
}