Я думаю, что проблема это свойство:
UpdateSourceTrigger="PropertyChanged"
Это заставляет WPF отправить значение обратно на вид-модели каждый раз, когда содержимое из TextBox
, например. потому что символ был введен в нее или удален из него.
Пусть ваш TextBox
имеет текст 1,00
, с видом-моделью, содержащей значение 1.0
double
. Затем вы удаляете запятую, поэтому текстовое поле имеет текст 100
. Поскольку текст был изменен, это заставляет WPF обновлять модель представления из представления. Строка 100
становится double
значением 100.0
, которое установлено в вашем Weight
вашего вида модели.
Если ваш класс модели представления реализует INotifyPropertyChanged
(я предполагаю, что он это делает), он будет запускать событие для объекта Weight
. WPF прослушивает это событие, а затем обновляет содержимое TextBox
от свойства Weight
. Как следствие, ваш TextBox
затем содержит текст 100,00
, так как это результат форматирования значения 100.0
с использованием строки формата N2
.
Самым простым решением является удаление имущества UpdateSourceTrigger="PropertyChanged"
. Это приводит к тому, что WPF обновляет только модель представления, когда TextBox
теряет фокус. Вы имеете дело с числовым вводом, и вполне возможно, что промежуточные значения недействительны или могут быть неверно истолкованы, поэтому лучше подождать, пока пользователь не завершит ввод числового значения, прежде чем пытаться что-либо с ним сделать.
Хмм, когда я удаляю запятую из '1,00', она выглядит как 100 –
@ThomasWeller Thx, пожалуйста, нажмите 4 раза« 123 »(1.231.231.231,00) и попробуйте удалить с помощью backspace (с конца) – avechuche
Хорошо, может быть, описать это в этом вопросе. Звучит скорее как прецедент, а затем удаляет запятую –