dotnet/wpf · error · InvalidOperationException

SR.NoUpdateSourceTriggerForInnerBindingOfMultiBinding

Error message

SR.NoUpdateSourceTriggerForInnerBindingOfMultiBinding

What it means

MultiBinding.CheckTrigger throws InvalidOperationException when an inner Binding of a MultiBinding uses an UpdateSourceTrigger other than PropertyChanged or Default. Inner bindings cannot use Explicit or LostFocus triggers because the MultiBinding controls updates as a whole.

Solutions

  1. Remove the UpdateSourceTrigger setting from inner bindings (use Default)
  2. Or set UpdateSourceTrigger="PropertyChanged" on each inner Binding
  3. Control update timing on the outer MultiBinding instead of the inner bindings

Example fix

<!-- before -->
<MultiBinding Converter="{StaticResource conv}">
  <Binding Path="A" UpdateSourceTrigger="LostFocus"/>
</MultiBinding>
<!-- after -->
<MultiBinding Converter="{StaticResource conv}">
  <Binding Path="A" UpdateSourceTrigger="PropertyChanged"/>
</MultiBinding>
Defensive patterns

Strategy: validation

Validate before calling

foreach (var b in multiBinding.Bindings.OfType<Binding>())
    if (b.UpdateSourceTrigger != UpdateSourceTrigger.PropertyChanged && b.UpdateSourceTrigger != UpdateSourceTrigger.Default)
        throw new InvalidOperationException("Inner bindings must use PropertyChanged or Default trigger");

Try / catch

try { BindingOperations.SetBinding(t, p, multiBinding); } catch (InvalidOperationException) { /* fix inner UpdateSourceTrigger */ }

Prevention

When it happens

Trigger: A child <Binding UpdateSourceTrigger="Explicit"/> or UpdateSourceTrigger="LostFocus" inside a MultiBinding, evaluated when the MultiBinding's binding expression is created (CreateBindingExpressionOverride calls CheckTrigger on each child).

Common situations: Copying a normal Binding with UpdateSourceTrigger="LostFocus" into a MultiBinding; setting Explicit on an inner binding to defer source updates; template reuse where the inner binding's trigger was configured for standalone use.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14). Data as JSON: /api/errors/c83e6d8d592a2e82. Report an issue: GitHub.

Appendix: source

Thrown at src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Data/MultiBinding.cs:378

    //------------------------------------------------------

    internal object DoFilterException(object bindExpr, Exception exception)
    {
        UpdateSourceExceptionFilterCallback callback = (UpdateSourceExceptionFilterCallback)GetValue(Feature.ExceptionFilterCallback, null);
        if (callback != null)
            return callback(bindExpr, exception);

        return exception;
    }

    internal static void CheckTrigger(BindingBase bb)
    {
        Binding binding = bb as Binding;
        if (binding != null)
        {
            if (binding.UpdateSourceTrigger != UpdateSourceTrigger.PropertyChanged &&
                binding.UpdateSourceTrigger != UpdateSourceTrigger.Default)
                throw new InvalidOperationException(SR.NoUpdateSourceTriggerForInnerBindingOfMultiBinding);
        }
    }

    internal override BindingBase CreateClone()
    {
        return new MultiBinding();
    }

    internal override void InitializeClone(BindingBase baseClone, BindingMode mode)
    {
        MultiBinding clone = (MultiBinding)baseClone;

        CopyValue(Feature.Converter, clone);
        CopyValue(Feature.ConverterParameter, clone);
        CopyValue(Feature.Culture, clone);
        CopyValue(Feature.ValidationRules, clone);
        CopyValue(Feature.ExceptionFilterCallback, clone);

View on GitHub (pinned to 81131a70a4)