diff --git a/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Data/BindingExpressionBase.cs b/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Data/BindingExpressionBase.cs index 3edb43d727e..7bd783c79da 100644 --- a/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Data/BindingExpressionBase.cs +++ b/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Data/BindingExpressionBase.cs @@ -1174,7 +1174,7 @@ internal virtual bool Validate(object value, ValidationStep validationStep) ValidationError oldValidationError = GetValidationErrors(validationStep); // ignore an error from the implicit DataError rule - this is checked - // separately (in BindingExpression.Validate). + // separately (in BindingExpression.Validate). if (oldValidationError != null && oldValidationError.RuleInError == DataErrorValidationRule.Instance) { @@ -1484,6 +1484,15 @@ private void ProcessDirty() { if (IsUpdateOnPropertyChanged) { + // cancel a pending UpdateTarget, so that it doesn't negate + // the effect of this change to the target value + DispatcherOperation op = (DispatcherOperation)GetValue(Feature.UpdateTargetOperation, null); + if (op != null) + { + ClearValue(Feature.UpdateTargetOperation); + op.Abort(); + } + if (Helper.IsComposing(Target, TargetProperty)) { // wait for the IME composition to complete