diff --git a/src/Avalonia.Base/AvaloniaObject.cs b/src/Avalonia.Base/AvaloniaObject.cs index 66765ede99..f5d2a6b9c8 100644 --- a/src/Avalonia.Base/AvaloniaObject.cs +++ b/src/Avalonia.Base/AvaloniaObject.cs @@ -455,7 +455,16 @@ namespace Avalonia VerifyAccess(); ValidatePriority(priority); - return _values.AddBinding(property, source, priority); + if (source is IBinding2 b) + { + if (b.Instance(this, property, null) is not UntypedBindingExpressionBase expression) + throw new NotSupportedException("Binding returned unsupported IBindingExpression."); + return GetValueStore().AddBinding(property, expression); + } + else + { + return _values.AddBinding(property, source, priority); + } } /// @@ -527,7 +536,16 @@ namespace Avalonia throw new ArgumentException($"The property {property.Name} is readonly."); } - return _values.AddBinding(property, source); + if (source is IBinding2 b) + { + if (b.Instance(this, property, null) is not UntypedBindingExpressionBase expression) + throw new NotSupportedException("Binding returned unsupported IBindingExpression."); + return GetValueStore().AddBinding(property, expression); + } + else + { + return _values.AddBinding(property, source); + } } ///