在TextBox上使用StringFormat绑定到double

我正在使用WPF的TextBox,将Text属性上的绑定设置为ViewModel上的double。

我的XAML看起来像这样:

 

不幸的是,当我将UpdateSourceTrigger切换到PropertyChanged并输入值12345 ,我得到12,354.00编辑 :注意4之前的5)。 这是在.NET格式化程序添加23之后将光标保持在同一位置的结果。

如何在将UpdateSourceTrigger设置为PropertyChanged的情况下使用StringFormat?

注意:这只发生在.NET 4中。

通常,您不希望UpdateSourceTriggerTextBox.Text绑定上成为PropertyChanged ,因为每次按下键时都会触发validation和更改通知。

如果你这样做只是为了如果用户点击Enter它将在处理save命令之前保存该值,然后我建议挂钩到PreviewKeyDown事件并手动更新源,如果按下的键是Enter(通常我做这个附属物)

 private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) { var obj = sender as UIElement; BindingExpression textBinding = BindingOperations.GetBindingExpression( obj, TextBox.TextProperty); if (textBinding != null) textBinding.UpdateSource(); } } 

但话虽如此,如果您仍想使用UpdateSourceTrigger=PropertyChanged ,则在显示值时考虑使用格式,但在用户编辑时将其删除。