【发布时间】:2017-01-20 05:43:07
【问题描述】:
我有一个 xaml 窗口,我想根据布尔属性的值将 Escape key 绑定到我的视图模型中的不同命令。
IsSearching == true,绑定到 CancelSearch 命令
IsSearching == false,绑定到关闭命令。
有没有办法在没有代码的情况下做到这一点?
【问题讨论】:
我有一个 xaml 窗口,我想根据布尔属性的值将 Escape key 绑定到我的视图模型中的不同命令。
IsSearching == true,绑定到 CancelSearch 命令
IsSearching == false,绑定到关闭命令。
有没有办法在没有代码的情况下做到这一点?
【问题讨论】:
<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();
}));
}
}
【讨论】:
您不能直接在 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:
};
}
}
【讨论】: