Por lo general, usted no quiere ser UpdateSourceTrigger
PropertyChanged
en un TextBox.Text
vinculante porque esto desencadena la validación y notificación de cambio de cada vez que se pulsa una tecla.
Si está haciendo esto solo para que, si el usuario pulsa Enter, guardará el valor antes de procesar el comando de guardar, entonces sugeriría conectarlo al evento PreviewKeyDown
y actualizar manualmente la fuente si la tecla presionada fuera Enter (Por lo general hacen de este un AttachedProperty)
private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
var obj = sender as UIElement;
BindingExpression textBinding = BindingOperations.GetBindingExpression(
obj, TextBox.TextProperty);
if (textBinding != null)
textBinding.UpdateSource();
}
}
pero dicho esto, si todavía quería utilizar UpdateSourceTrigger=PropertyChanged
, entonces considerar el uso del formato cuando se muestra el valor, pero quitarla mientras el usuario está editando.
<TextBox>
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Text" Value="{Binding Path=MyDoubleValue, StringFormat=N2}" />
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Text" Value="{Binding Path=MyDoubleValue, UpdateSourceTrigger=PropertyChanged}" />
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
¿No es 12,345.00 lo que se espera al usar StrngFormat N2? ¿Qué esperas? – Jens
Sí exactamente, pero en lugar de obtener eso tengo 12,354.00. – baalazamon
La cadena de formato no hará que los dígitos cambien así, debe haber algo más en –