我有一个有点好奇的问题。我正在使用“StringFormat = N2”。当我有值“1,00”时,我将光标放在“,”后面按“退格”,数字变为,神奇地在“100,00”。 WTF!我需要保持“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>
答案 0 :(得分:2)
两个观察结果:
StringFormat = N2告诉UI文本框中的值应格式化为带有两位小数的数字。
在ConverterCultuer = es-AR中告诉UI小数点字符是逗号。
让我们一步一步走:
我没有看到问题。
答案 1 :(得分:0)
我认为问题在于这个属性:
UpdateSourceTrigger="PropertyChanged"
这会强制WPF每次TextBox
的内容发生变化时都将值发送回视图模型,例如因为已在其中输入字符或从中删除了字符。
假设您的TextBox
包含文字1,00
,其中包含double
值1.0
的视图模型。然后删除逗号,因此文本框中包含文本100
。由于文本已更改,因此强制WPF从视图更新视图模型。字符串100
成为double
值100.0
,它在视图模型的Weight
属性中设置。
如果您的视图模型类实现INotifyPropertyChanged
(我假设它),它将为PropertyChanged
属性触发Weight
事件。 WPF侦听此事件,然后从TextBox
属性更新Weight
的内容。因此,您的TextBox
包含文字100,00
,因为这是使用100.0
格式字符串格式化值N2
的结果。
最简单的解决方法是删除属性UpdateSourceTrigger="PropertyChanged"
。这会导致WPF仅在TextBox
失去焦点时更新视图模型。您正在处理数字输入,很可能中间值无效或可能被误解,因此最好等到用户输入数值后才尝试对其进行任何操作。