我有一个xaml窗口,我希望将Escape key
绑定到视图模型中的不同命令,具体取决于布尔属性的值。
IsSearching == true
,绑定到CancelSearch命令
IsSearching == false
,绑定到关闭命令。
如果没有代码,有没有办法做到这一点?
答案 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:
};
}
}