У меня есть двусторонняя привязка к свойству строковой зависимости к тексту TextBox.Передача TwoWay на самом деле не двухсторонняя?
связывания выглядит следующим образом:
Text="{Binding MyValue, Mode=TwoWay}"
У меня есть некоторый код, который срабатывает в OnKeyUp (в качестве вложенного свойства), который устанавливает MyValue
. Но вместо того, чтобы принимать мою ценность и применять ее к свойству Text, это происходит наоборот.
Вот последовательность событий:
- Пользователь вводит строку текста, который выглядит следующим образом: 0299900650
- Пользователь нажимает ввод.
- В моем ключевом ключе я установил MyValue на 2999 и переместился в фокус на следующее поле.
- Сетчатка для MyValue срабатывает и делает NotifiyPropertyChanged с 2999
- LostFocus стреляет.
- инкубаторе для MyValue пожаров и делает NotifiyPropertyChanged с 0299900650.
Мне кажется, что моя ценность не делает его обратно в «TextBox.Text» каким-то образом. Когда я теряю фокус, TextBox обновляет значение строки с тем, что у нее есть в свойстве Text (неизмененное значение, потому что мое изменение не возвратилось.)
Есть ли какая-то волшебство WPF, о котором я не знаю?
ПРИМЕЧАНИЕ: Я дважды проверил свои привязки. (Кроме того, они работают с пользовательским интерфейсом, поэтому я думаю, что они верны для UI.)
ПРИМЕЧАНИЕ II: Когда я говорю, что «пользователь вводит строку», это действительно отсканированный штрих-код. Но поскольку я использую клавиатурный клин, это похоже на то, что он был введен. (Тем не менее, весь смысл установки значения заключается в том, что я делаю что-то другое, если пользователь сканирует его так же, как и при вводе текста.)
UPDATE: Я обнаружил, что это произошло из-за другого свойства, имеющего побочный эффект. Я смог решить проблему.
Есть ли способ сделать это, не подавляя OnKeyDown? У меня есть другие свойства, которые заинтересованы в этом событии. – Vaccano
@ Ваккано: не то, что я знаю. Фактически существует событие [PreviewKeyDown] (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown.aspx), но оно запускается ** перед ** привязкой, поэтому Кстати, привязка будет сжимать его, потому что он работает и на «LostFocus». Imo, лучшим решением является использование преобразователей и управление вашими переменными состояния внутри вашего кода. – Tigran