我正在使用
WPF的TextBox,将Text属性上的绑定设置为viewmodel上的double.
我的XAML看起来像这样:
<TextBox Text="{Binding Path=MyDoubleValue,StringFormat=N2,UpdateSourceTrigger=PropertyChanged}" />
不幸的是,当我将UpdateSourceTrigger切换到PropertyChanged并输入值12345时,我得到12,354.00(编辑:注意4之前的5).这是在.NET格式化程序添加2到3之后将光标保持在同一位置的结果.
如何将StringFormat与UpdateSourceTrigger一起设置为PropertyChanged?
注意:这只发生在.NET 4中.
解决方法
通常,您不希望UpdateSourceTrigger在TextBox.Text绑定上成为PropertyChanged,因为每次按下键时都会触发Validation和Change通知.
如果你这样做只是为了如果用户点击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,则在显示值时考虑使用格式,但在用户编辑时将其删除.
<TextBox> <TextBox.Style> <Style targettype="{x:Type TextBox}"> <Setter Property="Text" Value="{Binding Path=MyDoubleValue,StringFormat=N2}" /> <Style.Triggers> <Trigger Property="IsFocused" Value="True"> <Setter Property="Text" Value="{Binding Path=MyDoubleValue,UpdateSourceTrigger=PropertyChanged}" /> </Trigger> </Style.Triggers> </Style> </TextBox.Style> </TextBox>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。