【问题标题】:Reading Keyboard Input from ViewModel从 ViewModel 读取键盘输入
【发布时间】:2013-11-18 08:20:44
【问题描述】:

我正在使用带有 WPF 和 Prism(统一)的 MVVM 模式。我有一个工具正在读取用户扫描的条形码,并且根据扫描的条形码类型,该工具正在做一些事情。现在我有一个绑定到属性的文本框。我想用扫描的条形码的内容在视图模型中填充我的属性,而不使用文本框或类似内容。我想直接填写属性。有没有办法做到这一点?或者也许有人知道我该如何解决这个问题?

亲切的问候

【问题讨论】:

  • 不确定您真正要问的是什么...您的意思是,不是手动的,还是不在文本框中?还是别的什么?
  • 没错。我的意思是当我扫描条形码时(它与通常的键盘输入相同),我想将条形码的内容直接保存到属性而不是绑定到属性的文本框
  • hmmm ...您可能需要一个事件侦听器,然后从那里开始。我没有使用过扫描仪,所以不能肯定地告诉你。
  • 扫描仪实际上与键盘相同。只是通常的键盘输入来自它
  • 我认为他想避开文本框,直接进入模型,不需要文本框绑定

标签: c# wpf mvvm unity-container prism


【解决方案1】:

根据您的 cmets,您要做的是处理 keydown 事件。

在这里阅读:code project scanner reader。他做了你想做的事,并展示了处理什么/在哪里处理:)

编辑:
我已经回答了另一个可能相关的关键事件问题。随意看看at my other answer,它讨论了i:interaction和InputBindings,并指向另一篇关于处理关键事件的文章:up/down on datepicker,并讨论了/mvvm方法背后的代码。

希望你会发现它们很有用。

【讨论】:

  • 谢谢诺克提斯。我会看看它,我还需要找出如何将他的逻辑转换为 mvvm :)
【解决方案2】:

好吧,我不确定我是否以正确的方式获得它,但您可以使用 EventManager 捕获所有键盘输入。

EventManager.RegisterClassHandler(typeof(Window),
     Keyboard.KeyUpEvent,new KeyEventHandler(keyUp), true);


private void keyUp(object sender, KeyEventArgs e)
{
      if(e.Key == Key.OemComma)
             MessageBox.Show("Gotcha");
}

另一种选择是创建一个只读文本框,但它或多或少与您现在的相同。

【讨论】:

  • 不确定他想要什么,但 mvvm 评论可能意味着他不想要代码后面...
  • 您可以在应用程序域级别执行此操作,也可以将其提取到附加属性中。
猜你喜欢
  • 1970-01-01
  • 2018-02-15
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
  • 2014-09-18
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多