我正在使用SL Prism和MEF使用MVVM开发应用程序。
我的登录页面目前包含用户名和密码文本框以及一个登录按钮。我按钮的代码如下:
<Button x:Name="signInButton" Content="Sign In" cal:Click.Command="{Binding loginCommand}"/>
我正在努力解决的问题是连接文本框,以便在用户点击后输入loginCommand执行。我做了很多谷歌搜索,似乎无法找到任何应对MVVM的答案。
我尝试将KeyDown事件处理程序添加到控件所在的stackpanel中。但是从我背后的代码中我唯一可以实现的是将焦点设置为按钮。
private void StackPanel_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
this.signInButton.Focus();
e.Handled = true;
}
}
如何实现按下回车键的目标,导致执行loginCommand?
非常感谢 詹姆斯
答案 0 :(得分:3)
使用Automation Peer类按此按钮。然后,这将与您拥有的MVVM ICommand一起使用:
ButtonAutomationPeer peer =
new ButtonAutomationPeer( someButton );
IInvokeProvider invokeProv =
peer.GetPattern( PatternInterface.Invoke )
as IInvokeProvider;
invokeProv.Invoke();
答案 1 :(得分:0)
尝试使用参数(DependencyProperty)添加KeyDown
事件的触发器 - 应该调用的命令。如果key为Key.Enter
,则只需调用命令。
答案 2 :(得分:-1)
你能调用点击方法吗?例如,在你捕获Enter按钮的里面,“this.signInButton.Focus();”是,把“signInButton_Click(null,null);”直接触发按钮的单击方法。
答案 3 :(得分:-1)
您可以在xaml中为特定命令添加KeyBinding,如下所示:
<Button Command="{Binding TestCommand}" Content="Test">
<Button.InputBindings>
<KeyBinding Command="{Binding TestCommand}" Key="F2" />
</Button.InputBindings>
</Button>
这样,如果你的Button被聚焦,KeyBinding就可以工作。如果希望KeyBinding在更大的范围内可用,可以将KeyBinding添加到Window(Window.KeyBindings)或任何其他元素中。