From 18c844ef022983581d42a60cc6b17caaf9f4b8be Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 24 Nov 2023 16:42:38 +0100 Subject: [PATCH] Make BindingExpressionBase the public API. This matches WPF's API. --- src/Avalonia.Base/AvaloniaObject.cs | 2 +- src/Avalonia.Base/AvaloniaProperty.cs | 2 +- src/Avalonia.Base/Data/{Core => }/BindingExpressionBase.cs | 7 ++++--- src/Avalonia.Base/Data/IBindingExpression.cs | 7 ------- src/Avalonia.Base/DirectPropertyBase.cs | 2 +- src/Avalonia.Base/PropertyStore/ValueStore.cs | 4 ++-- src/Avalonia.Base/StyledProperty.cs | 2 +- tests/Avalonia.Base.UnitTests/AvaloniaPropertyTests.cs | 2 +- 8 files changed, 11 insertions(+), 17 deletions(-) rename src/Avalonia.Base/Data/{Core => }/BindingExpressionBase.cs (84%) delete mode 100644 src/Avalonia.Base/Data/IBindingExpression.cs diff --git a/src/Avalonia.Base/AvaloniaObject.cs b/src/Avalonia.Base/AvaloniaObject.cs index 05753738cb..afea0ba345 100644 --- a/src/Avalonia.Base/AvaloniaObject.cs +++ b/src/Avalonia.Base/AvaloniaObject.cs @@ -416,7 +416,7 @@ namespace Avalonia /// /// A disposable which can be used to terminate the binding. /// - public IBindingExpression Bind(AvaloniaProperty property, IBinding binding) + public BindingExpressionBase Bind(AvaloniaProperty property, IBinding binding) { if (binding is not IBinding2 b) throw new NotSupportedException($"Unsupported IBinding implementation '{binding}'."); diff --git a/src/Avalonia.Base/AvaloniaProperty.cs b/src/Avalonia.Base/AvaloniaProperty.cs index 1b32e4699e..62e8db62d7 100644 --- a/src/Avalonia.Base/AvaloniaProperty.cs +++ b/src/Avalonia.Base/AvaloniaProperty.cs @@ -566,7 +566,7 @@ namespace Avalonia /// /// The object instance. /// The binding source. - internal abstract IBindingExpression RouteBind( + internal abstract BindingExpressionBase RouteBind( AvaloniaObject o, UntypedBindingExpressionBase source); diff --git a/src/Avalonia.Base/Data/Core/BindingExpressionBase.cs b/src/Avalonia.Base/Data/BindingExpressionBase.cs similarity index 84% rename from src/Avalonia.Base/Data/Core/BindingExpressionBase.cs rename to src/Avalonia.Base/Data/BindingExpressionBase.cs index 401f8ac520..ad411130cf 100644 --- a/src/Avalonia.Base/Data/Core/BindingExpressionBase.cs +++ b/src/Avalonia.Base/Data/BindingExpressionBase.cs @@ -1,9 +1,10 @@ -using Avalonia.PropertyStore; +using System; +using Avalonia.PropertyStore; using Avalonia.Styling; -namespace Avalonia.Data.Core; +namespace Avalonia.Data; -public abstract class BindingExpressionBase : IBindingExpression, ISetterInstance +public abstract class BindingExpressionBase : IDisposable, ISetterInstance { private protected BindingExpressionBase() { diff --git a/src/Avalonia.Base/Data/IBindingExpression.cs b/src/Avalonia.Base/Data/IBindingExpression.cs deleted file mode 100644 index 8ab35c61f8..0000000000 --- a/src/Avalonia.Base/Data/IBindingExpression.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; - -namespace Avalonia.Data; - -public interface IBindingExpression : IDisposable -{ -} diff --git a/src/Avalonia.Base/DirectPropertyBase.cs b/src/Avalonia.Base/DirectPropertyBase.cs index c3aa7ac602..733df0d4a8 100644 --- a/src/Avalonia.Base/DirectPropertyBase.cs +++ b/src/Avalonia.Base/DirectPropertyBase.cs @@ -183,7 +183,7 @@ namespace Avalonia return o.Bind(this, source); } - internal override IBindingExpression RouteBind(AvaloniaObject o, UntypedBindingExpressionBase source) + internal override BindingExpressionBase RouteBind(AvaloniaObject o, UntypedBindingExpressionBase source) { return o.GetValueStore().AddBinding(this, source); } diff --git a/src/Avalonia.Base/PropertyStore/ValueStore.cs b/src/Avalonia.Base/PropertyStore/ValueStore.cs index 7da95a2990..4bca74b1b6 100644 --- a/src/Avalonia.Base/PropertyStore/ValueStore.cs +++ b/src/Avalonia.Base/PropertyStore/ValueStore.cs @@ -43,7 +43,7 @@ namespace Avalonia.PropertyStore ReevaluateEffectiveValues(); } - public IBindingExpression AddBinding( + public BindingExpressionBase AddBinding( StyledProperty property, UntypedBindingExpressionBase source) { @@ -156,7 +156,7 @@ namespace Avalonia.PropertyStore } } - public IBindingExpression AddBinding(DirectPropertyBase property, UntypedBindingExpressionBase source) + public BindingExpressionBase AddBinding(DirectPropertyBase property, UntypedBindingExpressionBase source) { DisposeExistingLocalValueBinding(property); _localValueBindings ??= new(); diff --git a/src/Avalonia.Base/StyledProperty.cs b/src/Avalonia.Base/StyledProperty.cs index e8ff8f72ed..8fdc62f361 100644 --- a/src/Avalonia.Base/StyledProperty.cs +++ b/src/Avalonia.Base/StyledProperty.cs @@ -228,7 +228,7 @@ namespace Avalonia return target.Bind(this, source, priority); } - internal override IBindingExpression RouteBind(AvaloniaObject o, UntypedBindingExpressionBase source) + internal override BindingExpressionBase RouteBind(AvaloniaObject o, UntypedBindingExpressionBase source) { return o.GetValueStore().AddBinding(this, source); } diff --git a/tests/Avalonia.Base.UnitTests/AvaloniaPropertyTests.cs b/tests/Avalonia.Base.UnitTests/AvaloniaPropertyTests.cs index 837fdaeac7..fcdbcf9704 100644 --- a/tests/Avalonia.Base.UnitTests/AvaloniaPropertyTests.cs +++ b/tests/Avalonia.Base.UnitTests/AvaloniaPropertyTests.cs @@ -175,7 +175,7 @@ namespace Avalonia.Base.UnitTests throw new NotImplementedException(); } - internal override IBindingExpression RouteBind(AvaloniaObject o, UntypedBindingExpressionBase source) + internal override BindingExpressionBase RouteBind(AvaloniaObject o, UntypedBindingExpressionBase source) { throw new NotImplementedException(); }