MVVM Light通过CommandParameter传递按下的键
本文关键字:Light 通过 CommandParameter MVVM | 更新日期: 2023-09-27 18:01:28
我想知道是否有办法通过CommandParameter将按下的键传递给我的动作。我想知道在动作被允许执行之前按了哪个键
这是我的XAML<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyDown">
<i:InvokeCommandAction Command="{Binding Path=ParseCommand}" CommandParameter=""/>
</i:EventTrigger>
</i:Interaction.Triggers>
我ViewModel public class MainViewModel : ViewModelBase
{
public RelayCommand<EventArgs> ParseCommand { get; set; }
public MainViewModel()
{
this.ParseCommand = new RelayCommand<EventArgs>(ParseLineExecute, CanParseLine);
}
public bool CanParseLine(EventArgs e)
{
return true;
}
public void ParseLineExecute(EventArgs e)
{
//something to do
}
}
如果这是不可能的,有什么更好的方法?如果可能的话,我不想从MVVM Light中移出
问题解决了。我要做的是添加以下命名空间:
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP8"
和从:
切换<i:EventTrigger EventName="KeyDown">
<i:InvokeCommandAction Command="{Binding Path=ParseCommand}" CommandParameter=""/>
</i:EventTrigger>
:
<i:EventTrigger EventName="KeyDown">
<cmd:EventToCommand Command="{Binding Path=ParseCommand}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
这样,通过知道指定的事件(在本例中是"KeyDown"), PassEventArgsToCommand将把正确的参数传递给parseccommand。通过显式地将EventArgs转换为KeyEventArgs,我可以知道用户按了什么键。
这是我的视图模型:public class MainViewModel : ViewModelBase
{
public RelayCommand<EventArgs> ParseCommand { get; set; }
public MainViewModel()
{
this.ParseCommand = new RelayCommand<EventArgs>(ParseLineExecute, CanParseLine);
}
public bool CanParseLine(EventArgs e)
{
var pressedKey = (e != null) ? (KeyEventArgs)e : null;
if (pressedKey.Key == Key.Space && pressedKey != null)
{
return true;
}
else
{
return false;
}
}
public void ParseLineExecute(EventArgs e)
{
//parsing code
}
}