【问题标题】:Binding Double to TextBox将双精度绑定到文本框
【发布时间】:2012-01-13 18:18:18
【问题描述】:

我经常使用 TextBox 来绑定整数,没有太大问题。

但是,如果我尝试将 TextBox 绑定到 Double 它不起作用。

当我输入 5,85 ( ,作为我的文化小数分隔符) 时,我将 585.0 传递给双精度值。

它是如何转换的,我可以使用什么解决方案来解决这个问题? ValueConverter 会是最佳解决方案吗?

【问题讨论】:

  • 这听起来不是您的小数分隔符,或者应用程序不关心文化。
  • 我正在调试并确保NumberFormatInfo.CurrentInfo.NumberDecimalSeparator 是我所认为的。那是正确的财产不是吗?

标签: wpf xaml data-binding ivalueconverter


【解决方案1】:

您可以尝试将其添加到应用程序的构造函数中:

FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement),
             new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

但是,请注意,如果您自定义小数分隔符,这将不起作用。 (WPF double valued data binding with custom decimal separator)

【讨论】:

  • 为什么不在主窗口构造函数中简单地设置 Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)?
  • Clemens,您的解决方案也有效,但您必须记住为您在应用程序中创建的每个窗口分别放置它,而不是为应用程序中的所有框架元素设置语言的“应用程序构造方法”
  • 你是对的。在这种情况下,覆盖内置依赖属性的默认值是有意义的。
【解决方案2】:

出于诊断目的,您可以将这两行代码添加到程序的开头...

    var cc = Thread.CurrentThread.CurrentCulture;
    var cuic = Thread.CurrentThread.CurrentUICulture;

并比较结果。 “cuic”文化将保持“en-US”的可能性非常大,因为 UI 线程通常以这种方式完成。您可以通过在项目文件中设置<UICulture> 标记来更改此设置,或者您可以try 作为诊断...

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

并评估副作用。否则你可以实现一个 IValueConverter...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 2010-12-08
    • 2011-11-22
    • 1970-01-01
    相关资源
    最近更新 更多