我有一个有点好奇的问题。我使用的是"StringFormat = N2“。当我有值"1,00“时,我把光标放在",”后面,我按“退格键”,数字就神奇地变成了"100,00“。见鬼!我需要保持"1,00“几乎总是"100,00”= "10.000,00“等等
<TextBox Height="40" VerticalContentAlignment="Center" Width="320">
<TextBox.Text>
<Binding Path="Weight"
StringFormat="N2"
ConverterCulture="es-AR"
UpdateSourceTrigger="PropertyChanged">
</Binding>
</TextBox.Text>
</TextBox>发布于 2016-09-24 04:17:02
两个观察结果:
所以让我们一步一步来:
我看不出有什么问题。
发布于 2016-09-24 04:08:50
我认为问题在于这个属性:
UpdateSourceTrigger="PropertyChanged"这迫使WPF在每次TextBox的内容发生变化时向视图模型发回一个值,例如,因为已经在其中键入或删除了一个字符。
假设您的视图模型包含文本1,00,而double - TextBox包含double值1.0。然后删除逗号,这样文本框中的文本就是100。由于文本已更改,这将强制WPF从视图更新view-model。字符串100成为double值100.0,该值是在视图模型的Weight属性中设置的。
如果您的视图模型类实现了INotifyPropertyChanged (我假设它实现了),那么它将为Weight属性触发一个PropertyChanged事件。WPF侦听此事件,然后从Weight属性更新TextBox的内容。因此,您的TextBox将包含文本100,00,因为这是使用N2格式字符串格式化值100.0的结果。
最简单的修复方法是删除属性UpdateSourceTrigger="PropertyChanged"。这会导致WPF仅在TextBox失去焦点时更新视图模型。您正在处理的是数值输入,中间值很可能是无效的或可能被误解,因此最好等到用户输入完数值后再尝试对其执行任何操作。
https://stackoverflow.com/questions/39667633
复制相似问题