【发布时间】:2017-07-01 19:46:47
【问题描述】:
我有一种情况需要处理按键事件,它可以是 A-Z、0-9 中的任何一个,但我需要在 ViewModel 中处理它。按下哪个键应该传递给 ViewModel。我使用的是 prism 6.0,因此 View1ViewModel 与 view1 自动连接。
我知道对于特定的键我可以处理,但如何对所有键执行相同的操作。
我在 ViewModel "KeyPressed" 中有一个属性,我在代码隐藏中尝试了以下代码
private void Window_PreviewKeyUp(object sender, KeyEventArgs e)
{
_mainWindowViewModel.KeyPressed = e.Key;
}
但是此代码不会像在 Prism 框架视图模型中那样更新 View1ViewModel,并且视图绑定是通过框架进行的。
我尝试过使用交互,我把下面的代码放在根Grid 部分。
<i:Interaction.Triggers >
<i:EventTrigger EventName="KeyUp">
<i:InvokeCommandAction Command="{Binding KeyUpEventCommand}"
CommandParameter="..."/>
</i:EventTrigger>
</i:Interaction.Triggers>
事件被触发,但由于没有 Command 参数,所以它为空。我需要传递一个commandParameter,但不知道它应该是什么!
在 ViewModel 中:
public DelegateCommand KeyUpEventCommand { get; private set; }
private string strAlphabet;
public string Alphabets
{
get { return strAlphabet; }
set { SetProperty(ref strAlphabet, value); }
}
public MainWindowViewModel(IEventAggregator eventAggregator)
{
KeyUpEventCommand = new DelegateCommand(KeyUpEventHandler);
}
public void KeyUpEventHandler()
{
//This logic can be changed
if (Alphabets == "A")
{
// Perform some action
}
if (Alphabets == "B")
{
// Perform some other action
}
}
任何想法/建议我该如何处理?
【问题讨论】:
-
“不更新 View1ViewModel”究竟是什么意思?发生什么了? PreviewKeyUp 事件处理程序是否被调用但视图模型的 KeyPressed 属性的设置器没有被调用或什么?
-
我已经更新了我的问题,KeyUpEventCommand 被触发,但它不包含按键的值。
-
视图模型类中的KeyUpEventCommand是如何准确定义的?
-
你能添加你的CommandParameter吗?
-
我已经更新了我的代码。