From 9af19fb1f598edd3908fc8706307586a62aa3169 Mon Sep 17 00:00:00 2001 From: Sam Bent Date: Wed, 15 Dec 2021 14:54:07 -0800 Subject: [PATCH] fix IME vs. property-changed Binding battle --- .../System/Windows/Data/BindingExpressionBase.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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