2012-01-13 18 views
9

He usado TextBox con frecuencia para enlazar enteros sin mucho problema.Encuadernación doble a TextBox

Sin embargo, si intento vincular un TextBox a un doble, no funciona.

Cuando escribo 5,85 (siendo mi decimalSelector de culturas) paso 585.0 al doble valor.

¿Cómo se está convirtiendo y qué solución podría usar para solucionarlo? ¿Sería un ValueConverter la mejor solución?

+2

Esto parece que no es su separador decimal o la aplicación no se preocupa por la cultura. –

+0

Estaba depurando y garantizado 'NumberFormatInfo.CurrentInfo.NumberDecimalSeparator' era lo que pensé que era. Esa es la propiedad correcta no es? –

+1

Eso suena bien ... –

Respuesta

4

Usted podría intentar añadir esta al constructor de su aplicación:

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

Sin embargo, tenga en cuenta que esto no funcionará si se personaliza el separador decimal. (WPF double valued data binding with custom decimal separator)

+0

¿Por qué no simplemente establecer Language = XmlLanguage.GetLanguage (CultureInfo.CurrentCulture.IetfLanguageTag) en el constructor de la ventana principal? – Clemens

+1

Clemens, Su solución también funciona, pero debe recordar colocarla por separado para cada ventana que cree en la aplicación en comparación con el 'método de construcción de la aplicación', donde el idioma está configurado para todos los elementos del marco en la aplicación – friskm

+0

Tiene razón. Tiene sentido anular el valor predeterminado de una propiedad de dependencia incorporada en este caso. – Clemens

1

Para fines de diagnóstico, se puede añadir estas dos líneas de código para el inicio de su programa ...

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

y comparar los resultados. Las posibilidades son bastante buenas de que la cultura 'cuic' contenga 'en-US' porque el hilo de la interfaz de usuario normalmente se realiza de esa manera. Puede cambiar esto estableciendo la etiqueta <UICulture> en el archivo de proyecto, o se puede tratar como diagnóstico ...

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

y evaluar los efectos secundarios. De lo contrario, puede implementar un IValueConverter ...