我有一个WPF项目,我试图根据我的viewmodel中的公共属性状态启用/禁用键盘快捷键。也许有一个超级简单的解决方案,但我是WPF的新手,我找不到谷歌的任何东西。这是我的工作XAML:
<KeyBinding Modifiers="Control" Key="p" Command="{Binding PrintCommand}" CommandParameter="{Binding OpenEvent}"/>
以下是我想做的事情:
<KeyBinding Modifiers="Control" Key="p" Command="{Binding PrintCommand}" CommandParameter="{Binding OpenEvent}" IsEnabled="{Binding IsOnline}"/>
基本上,我想知道是否有类似于WPF按钮的“IsEnabled”属性,我可以应用于此。我有大约20种不同的快捷方式,这取决于这个变量。我可以为20个命令中的每个命令进入后面的代码并添加逻辑,但这看起来相当笨拙,我认为必须有更好的方法。我见过使用“CanExecute”的解决方案,但是对于ICommand类型的命令,我使用的是RelayCommand类型的命令。
答案 0 :(得分:2)
在视图模型上使用命令的CanExecute方法。
然后你可以删除你的XAML中的IsEnabled属性。
答案 1 :(得分:1)
您可以在KeyBinding命令中使用mvvm-light
RelayCommand
CanExecute。下面是一个简单的例子,我根据SomeProperty
MainViewModel.cs
private bool someProperty = false;
public bool SomeProperty
{
get { return someProperty = false; }
set { Set(() => SomeProperty, ref someProperty, value); }
}
private RelayCommand someCommand;
public RelayCommand SomeCommand
{
get
{
return someCommand ??
new RelayCommand(() =>
{
//SomeCommand actions
}, () =>
{
//CanExecute
if (SomeProperty)
return true;
else
return false;
});
}
}
和前端的Binding
MainWindow.xaml
<Window x:Class="WpfApplication12.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
DataContext="{Binding Source={StaticResource Locator}, Path=Main}">
<Window.InputBindings>
<KeyBinding Key="P" Command="{Binding SomeCommand}" />
</Window.InputBindings>
<Grid>
<TextBox Width="200" Height="35" />
</Grid>
希望有所帮助