WPF TextBox使用KeyBinding绑定Enter和Return无响应问题

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

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

ViewModel绑定命令事件

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的函数;

<TextBox PreviewKeyUp="Test_txt_PreviewKeyUp"/>
private void Test_txt_PreviewKeyUp(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter || e.Key == Key.Return)
    {
        if (DataContext != null && (DataContext is ViewModel.TestViewModel))
        {
            ViewModel.TestViewModel vm = (ViewModel.TestViewModel)DataContext;
            if (vm != null)
            {
                vm.TestCmd.Execute(null);
            }
        }
    }
}

最后达到想要的结果;

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

**************************************************************************************************************

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值