Я проверял код, когда UpdateSourceTrigger=PropertyChanged
, как указано в комментариях.Проблема в том, что PropertyChanged
заставляет привязку обновляться сразу после каждого нажатия клавиши.Из-за этого поведение вполне предсказуемо, когда входные данные не содержат действительный float
.До сих пор я видел три разных поведения.После ввода только одной цифры и периода после этого привязка иногда преобразует ее в десятичную:
![Conversion](https://i.stack.imgur.com/hyRP8.png)
Но иногда этого не происходит, иконтроль просто позвольте мне ввести 3.
без каких-либо изменений.Поведение кажется действительно случайным.Ключевым моментом является то, что value
, установленное для свойства backing, затем отражается в пользовательском интерфейсе благодаря событию PropertyChanged
и привязке данных, что приводит к изменению текста и прыжку курсора.
ПростоТем не менее, проблема здесь заключается в том, что свойство имеет значение float
, а вход принимает любое значение string
.Решением вашей проблемы может быть использование свойства string
для привязки, например AmountText
, а затем в установщике убедитесь, что текст действительно является допустимым float
, проанализируйте его и вручную установите свойство Amount
.Таким образом, вы сохраните «немедленное» обновление значения, как только будет введен правильный ввод, а также избежите странного поведения, которое вы видите.
Также проверьте WinRTXamlToolkit и NumericUpDown
control , который может быть лучшим решением для вашей цели, поскольку предоставляет естественный способ ввода числовых значений пользователем.