【问题标题】:Numbers displaying backwards?数字向后显示?
【发布时间】:2011-07-20 15:11:15
【问题描述】:

当我看到用户的投诉时,我不相信...在绑定的 WPF 文本框中输入 .123 显示 .321! 现在已修复,但我想知道这是否可以分类作为 WPF 错误?

当文本框绑定到实体框架双字段且 UpdateSourceTrigger 绑定模式设置为 PropertyChanged 时,会出现此问题。在小数点后键入每个数字,光标将移回小数点后,导致数字倒退。当我将 UpdateSourceTrigger 放回其默认的 LostFocus 时,问题(可以理解)消失了。

那么,这是一个错误吗?是否有一种解决方法可以让 UpdateSourceTrigger 在绑定到双字段时成为 PropertyChanged?

【问题讨论】:

  • 您使用的是标准的 WPF 文本框吗?
  • @Bas:这种行为发生在标准文本框上 - 但只有在您更改默认绑定模式时才会发生。
  • 我认为这是为什么绑定应该是正确类型的另一个例子。将 TextBox 的字符串 'Text' 属性绑定到 Double 意味着该值需要双向转换,其中一些转换会失败。

标签: wpf data-binding binding


【解决方案1】:

TextBox 设置为LostFocus 而不是PropertyChanged 是有原因的。当您将其绑定到 EF 双精度时,验证会导致值重置,进而可以重置光标位置。

使用 UpdateSourceTrigger.PropertyChanged 使 TextBox 正常运行需要大量自定义逻辑,因为您需要在绑定更新之前跟踪事件中的光标位置,并在之后恢复。

不过,我怀疑这会被视为错误,因为 WPF 将 TextBox 设置为 UpdateSourceTrigger.LostFocus。如果默认设置不同,我同意这将是一个错误 - 但考虑到默认设置,我怀疑团队会将其视为一个错误。

【讨论】:

    【解决方案2】:

    很抱歉这么晚才参加聚会,但我们也遇到了同样的问题,以防万一其他人碰巧看到这篇文章,我们有一个不同的解决方案……我们为 TextBox 使用了 StringFormat:

    Text="{Binding Path=YourDecimalOrDouble, StringFormat=\{0:#.#####\}, UpdateSourceTrigger=PropertyChanged}
    

    以上内容应该可以解决您遇到的问题......至少它为我们解决了。

    不管怎样,希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-13
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      相关资源
      最近更新 更多