2013-11-18 2 views
0

Я использую шаблон MVVM с WPF и Prism (единство). У меня есть инструмент, который считывает штрих-код, сканируемый пользователем, и в зависимости от того, какой штрих-код сканируется, инструмент делает некоторые вещи. Прямо сейчас у меня есть текстовое поле, привязанное к свойству. Я хотел бы заполнить мое свойство в viewmodel содержимым сканированного штрих-кода без использования текстового поля или подобного. Я хотел бы заполнить собственность напрямую. Есть ли способ сделать это? Или, может быть, у кого-то есть идея, как я могу решить эту проблему?Чтение клавиатуры Вход с ViewModel

вид касается

+1

не уверен, что вы действительно спрашиваете ... вы имеете в виду, а не вручную или нет в текстовом поле? или что-то другое? – Noctis

+0

Да, правильно. Я имею в виду, когда я сканирую штрих-код (это то же самое, что и обычный ввод с клавиатуры), я хочу сохранить содержимое штрих-кода непосредственно в свойстве, а не в текстовое поле, привязанное к свойству – darkdog

+0

hmmm ... вам может понадобиться иметь прослушиватель событий и делать это оттуда. Я не работал со сканерами, так что не мог точно сказать вам. – Noctis

ответ

1

В соответствии с вашими комментариями, что вы хотите сделать, это обрабатывать KeyDown событие.

Прочитать здесь: code project scanner reader. Он сделал то, что вы хотите, и показать, что/где обращаться :)

Edit:
Я ответил на другой вопрос ключевых событий, которые могут иметь отношение. Не забудьте посмотреть at my other answer, он обсуждает i:interaction и InputBindings, а также указывает в другой статье об обработке ключевых событий: up/down on datepicker и обсуждает подходы позади/mvvm.

Надеюсь, вы найдете их полезными.

+0

Спасибо Noctis. Я посмотрю на него, и мне также нужно выяснить, как преобразовать его логику в mvvm :) – darkdog

0

Ну, я не уверен, что получаю его правильно, но вы можете поймать весь ввод с помощью 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"); 
} 

Другой вариант - создать текстовое поле только для чтения, но оно более или менее точно так же, как и сейчас.

+0

не уверен в том, что он хочет, но комментарий mvvm может означать, что он не хочет, чтобы код позади ... – Noctis

+0

You может сделать это на уровне домена приложения, или вы можете извлечь его в прикрепленное свойство. –

Смежные вопросы