我正在使用WPF 4.0 TextBox和绑定。我正在使用StringFormat将数字格式化为货币。 XAML看起来像这样:
<TextBox Text="{Binding Path=ValueProperty, ValidatesOnDataErrors=True, ValidatesOnExceptions=True, StringFormat={}{0:C}, UpdateSourceTrigger=PropertyChanged}">
</TextBox>
除了奇怪的行为外,一切似乎都能正常工作: 例如,当用户键入12时:在键入1之后,文本框中的值变为$ 1.00,奇怪的是光标移动到$和1之间。 因此,当用户只输入12时,结果将变为$ 21.00。
我该如何解决这种奇怪的行为?
答案 0 :(得分:10)
我将UpdateSourceTrigger更改回LostFocus的默认值(对于TextBox)。
通过将其设置为PropertyChanged,您每次用户键入字符时都会强制进行验证和字符串格式。这会导致非常奇怪的行为,例如你所看到的。
如果您将其保留为默认值(或明确将其设置回LostFocus),则在用户完成键入时将进行格式化+验证。这将消除StringFormat插入新字符时发生的奇怪问题,验证中断部分,以及使用PropertyChanged将遇到的其他问题。
答案 1 :(得分:1)
您可以使用此字符串格式,它将解决此问题
"$###\,##0.0##"
您的代码应该是
<TextBox Text="{Binding Path=ValueProperty, ValidatesOnDataErrors=True, ValidatesOnExceptions=True, StringFormat=$###\,##0.0##, UpdateSourceTrigger=PropertyChanged}">
</TextBox>
答案 2 :(得分:0)
此问题已在.NET 4.5中修复。对于.NET 4,我不得不删除StringFormat以保持UpdateSourceTrigger = PropertyChanged