WPF中TextBox使用KeyBinding绑定命令,键盘事件

    最近在做一个扫码枪识别条形码的功能,TextBox文本按回车键或者是扫码枪识别条形码自动触发查询功能,由于架构采用的是MVVM的开发模式,所以,刚开始采用KeyBinding的方式绑定命令,然后实现该功能;代码如下:

<TextBox>
	<TextBox.InputBindings>
		<KeyBinding Key="Enter" Command="{Binding TestCmd}"/>
	</TextBox.InputBindings>
</TextBox>

对应的ViewModel中绑定命令事件,代码如下所示

//ViewModel文件夹下文件
public class TestViewModel
{
    private ICommand m_TestCmd;
    public ICommand TestCmd
    {
	    get
	    {
		    return m_TestCmd ?? (m_TestCmd = new RelayCommand(() =>
		    {
		    }));
	    }
    }
}

    初步验证的时候,发现是可以的,条形码是全数字的会触发,但是条形码中包含字母时,就不触发命令事件了,这到底什么原因呢?

    调试发现,条形码中含字母时,识别的文本输入TextBox时,最后触发的不是Enter键,而是Return键,至于为什么会触发Return键呢,难道是扫码枪设置得原因,这个我也不清楚,得去网上找原因了。既然这样,那在界面中就把Return键给加上<KeyBinding Key="Return" Command="{Binding TestCmd}"/>,但是发现还是没有触发。

    最后不采用KeyBinding绑定命令方式,直接在界面中使用PreviewKeyUp事件,在后台鼠标弹起事件中,调用ViewModel的函数;

    xaml设计界面中,TextBox使用PreviewKeyUp事件代码

<TextBox PreviewKeyUp="Test_txt_PreviewKeyUp"/>

    在xaml后台(xxxx.xaml.cs) 文件中添加Loaded事件把ViewModel中TestViewModel类和xaml的上下文绑定,代码如下所示

private void TestView_Loaded(object sender, RoutedEventArgs e)
{
	DataContext = new ViewModel.TestViewModel();
}

    xaml后台写Test_txt_PreviewKeyUp事件,调用ViewModel中的函数。

private void Test_txt_PreviewKeyUp(object sender, KeyEventArgs e)
{
	if (e.Key == Key.Enter || e.Key == Key.Return)
	{
        //DataContext:上下文
        //ViewModel:项目中文件夹名称,存放XAML对应的ViewModel类文件
        //TestViewModel:xaml对应的ViewModel类
		if (DataContext != null && (DataContext is ViewModel.TestViewModel))
		{
			ViewModel.TestViewModel vm = (ViewModel.TestViewModel)DataContext;
			if (vm != null)
			{
				vm.TestCmd.Execute(null);
			}
		}
	}
}

    最后达到想要的结果;

    在此做个笔记和分享,大家如果想到其他办法,欢迎评论交流,谢谢。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值