1

在属性绑定中使用 StringFormat 时,.Net 3.5 和 4.0 有什么区别?

我有一个 WPF 窗口,其中只有一个文本框,其 Text 属性绑定到 double 类型的属性。在 3.5 中,当我编辑数字时,文本框按预期工作,但在 4.0 中,我只能编辑小数位的一侧,使用退格或删除会导致出现奇怪的格式并覆盖数据。展示这一点的最佳方式是尝试针对不同框架的示例。

 <TextBox FontSize="16" Text="{Binding Path=SetPoint, UpdateSourceTrigger=PropertyChanged, StringFormat=0.000}"  Margin="185,130,209,146" />

我还注意到,当我删除 UpdateSourceTrigger 时,.Net 4.0 就像 3.5 版本一样工作。UpdateSourceTriggers 在不同版本中是否颠倒了?

 <TextBox FontSize="16" Text="{Binding Path=SetPoint, StringFormat=0.000}"  Margin="185,130,209,146" />
4

2 回答 2

2

我相信这个Microsoft Connect问题描述了您所看到的问题。

在 3.5 中,绑定将在每次击键后将新值写回源,而不更改 TextBox 文本。但是该文本可能无法准确地表示源的值,可能是因为它不包括格式和转换,或者因为源将值(在属性设置器中)更改为其他值。这导致了频繁和激烈的抱怨——人们希望 TextBox 显示源的值,就像 TextBlock 绑定到具有相同转换器和格式的相同属性时一样。UI 应该显示数据中的实际内容,而不是最终用户键入的内容。

为了修复 4.0 中的此类错误,绑定现在在每次更新后将格式和转换应用于源的新值。(LostFocus 绑定在 3.5 中已经这样做了。)TextBox 现在显示数据中的内容,但这会使用户的输入更加复杂。

于 2012-06-29T02:56:52.377 回答
0

标准 WPF 在 xaml 代码中有点不同,使用:

.., StringFormat={}{0:C2}}"
.., StringFormat={}{0:dd/MM/yyyy}}"

其他示例:
http ://elegantcode.com/2009/04/07/wpf-stringformat-in-xaml-with-the-stringformat-attribute/
http://www.codeproject.com/Articles/195436/Formatting-text -在-Silverlight-XAML-使用-StringFo

于 2012-06-28T20:51:35.697 回答