Acabo de actualizar nuestra aplicación wpf de 3.5sp1 a 4.0.WPF TextBox Enlace con formato
El siguiente código usamos para vincular el cuadro de texto al modelo de vista subyacente. El cuadro de texto es editable.
<TextBox HorizontalContentAlignment="Right"
Text="{Binding Path=Price, StringFormat={0:#,##0;(#,##0)}, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True}"/>
En 3.5sp1 el formateo solo ocurriría inicialmente. Por lo tanto, cuando el cuadro de texto se cargó y se vinculó al valor 4000, el formato lo cambiaría a 4.000. Si el usuario edita este valor, no se formateará.
En 4.0, el formateo ocurre cuando el valor cambia (es decir, mientras el usuario ingresa un nuevo valor). Si bien en teoría esto suena bien, en realidad es un desastre. El cursor está por todos lados. Es inutilizable.
Ahora, podríamos cambiar UpdateSourceTrigger a "LostFocus" pero eso introduce nuevos problemas con datos que no se validan en ciertos escenarios.
¿Hay alguna manera de recuperar el antiguo comportamiento 3.5sp1?
Actualización 1
Utilizando Convertidor todavía procudes mismo comportamiento:
public class DecimalConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
return ((decimal)value).ToString("#,##0;(#,##0)");
return string.Empty;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
y el XAML modificación:
<TextBox Text="{Binding Path=Price, Converter={StaticResource DecimalConverter}, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True}"/>
Actualización 2
Similar a este connect article.
Duro. Quizás la mejor ruta es examinar los problemas específicos que tiene con LostFocus. Por ejemplo, tuve que activar manualmente la vinculación/validación cuando el usuario presionó Control-S mientras estaba dentro del cuadro de texto. –
Sí, Jonathan, comencé a mirar LostFocus, pero esperaba evitar un cambio global masivo. :-( – ozczecho