diff --git a/src/Avalonia.Base/AvaloniaObject.cs b/src/Avalonia.Base/AvaloniaObject.cs
index 22aeccc3fb..99e27e7daf 100644
--- a/src/Avalonia.Base/AvaloniaObject.cs
+++ b/src/Avalonia.Base/AvaloniaObject.cs
@@ -466,7 +466,7 @@ namespace Avalonia
/// The old property value.
/// The new property value.
/// The priority of the binding that produced the value.
- protected void RaisePropertyChanged(
+ protected internal void RaisePropertyChanged(
AvaloniaProperty property,
object oldValue,
object newValue,
@@ -569,44 +569,6 @@ namespace Avalonia
=> SetAndRaiseCore(property, ref backing, val, notifyWrapper),
value);
}
-
- ///
- /// Default setter handler that will set backing field and raise notification.
- ///
- private sealed class DefaultSetterHandler : DeferredSetterOptimized.ISetterHandler
- {
- public static readonly DefaultSetterHandler Instance = new DefaultSetterHandler();
-
- public bool Update(AvaloniaObject source, AvaloniaProperty property, ref T backing, T value)
- {
- var old = backing;
- backing = value;
-
- source.RaisePropertyChanged(property, old, value);
-
- return true;
- }
- }
-
- ///
- /// Setter handler that will run custom user callback.
- ///
- private sealed class CallbackSetterHandler : DeferredSetterOptimized.ISetterHandler
- {
- private readonly SetAndRaiseCallback _callback;
-
- public CallbackSetterHandler(SetAndRaiseCallback callback)
- {
- _callback = callback;
- }
-
- public bool Update(AvaloniaObject source, AvaloniaProperty property, ref T backing, T value)
- {
- _callback(value, ref backing, notification => notification());
-
- return true;
- }
- }
protected bool SetAndRaiseOptimized(AvaloniaProperty property, ref T field, T value)
{
@@ -619,39 +581,21 @@ namespace Avalonia
DeferredSetterOptimized setter = Values.GetDeferredSetter(property);
- return setter.SetAndNotify(this, property, DefaultSetterHandler.Instance, ref field, value);
- }
-
- protected bool SetAndRaiseOptimized(
- AvaloniaProperty property,
- ref T field,
- SetAndRaiseCallback setterCallback,
- T value)
- {
- VerifyAccess();
-
- if (EqualityComparer.Default.Equals(field, value))
- {
- return false;
- }
-
- DeferredSetterOptimized setter = Values.GetDeferredSetter(property);
-
- return setter.SetAndNotify(this, property, new CallbackSetterHandler(setterCallback) , ref field, value);
+ return setter.SetAndNotify(this, property, ref field, value);
}
///
- /// Default assignment logic for SetAndRaise.
- ///
- /// The type of the property.
- /// The property.
- /// The backing field.
- /// The value.
- /// A wrapper for the property-changed notification.
- ///
- /// True if the value changed, otherwise false.
- ///
- private bool SetAndRaiseCore(AvaloniaProperty property, ref T field, T value, Action notifyWrapper)
+ /// Default assignment logic for SetAndRaise.
+ ///
+ /// The type of the property.
+ /// The property.
+ /// The backing field.
+ /// The value.
+ /// A wrapper for the property-changed notification.
+ ///
+ /// True if the value changed, otherwise false.
+ ///
+ private bool SetAndRaiseCore(AvaloniaProperty property, ref T field, T value, Action notifyWrapper)
{
var old = field;
field = value;
diff --git a/src/Avalonia.Base/Utilities/AvaloniaPropertyCollection.cs b/src/Avalonia.Base/Utilities/AvaloniaPropertyCollection.cs
index 5b1492a7a8..9b64342814 100644
--- a/src/Avalonia.Base/Utilities/AvaloniaPropertyCollection.cs
+++ b/src/Avalonia.Base/Utilities/AvaloniaPropertyCollection.cs
@@ -95,7 +95,7 @@ namespace Avalonia.Utilities
return true;
}
- public void AddValueInternal(AvaloniaProperty property, TValue value)
+ public void AddValue(AvaloniaProperty property, TValue value)
{
Entry[] entries = new Entry[_entries.Length + 1];
@@ -117,7 +117,7 @@ namespace Avalonia.Utilities
_entries = entries;
}
- public void SetValueInternal(AvaloniaProperty property, TValue value)
+ public void SetValue(AvaloniaProperty property, TValue value)
{
_entries[TryFindEntry(property.Id).Item1].Value = value;
}
diff --git a/src/Avalonia.Base/Utilities/DeferredSetterOptimized.cs b/src/Avalonia.Base/Utilities/DeferredSetterOptimized.cs
index e3bed90498..4858372828 100644
--- a/src/Avalonia.Base/Utilities/DeferredSetterOptimized.cs
+++ b/src/Avalonia.Base/Utilities/DeferredSetterOptimized.cs
@@ -17,20 +17,26 @@ namespace Avalonia.Utilities
_pendingValues = new SingleOrQueue();
}
+ private static void SetAndRaisePropertyChanged(AvaloniaObject source, AvaloniaProperty property, ref TSetRecord backing, TSetRecord value)
+ {
+ var old = backing;
+
+ backing = value;
+
+ source.RaisePropertyChanged(property, old, value);
+ }
+
public bool SetAndNotify(
AvaloniaObject source,
AvaloniaProperty property,
- ISetterHandler handler,
ref TSetRecord backing,
TSetRecord value)
{
if (!_isNotifying)
{
- bool updated;
-
using (new NotifyDisposable(this))
{
- updated = handler.Update(source, property, ref backing, value);
+ SetAndRaisePropertyChanged(source, property, ref backing, value);
}
if (!_pendingValues.Empty)
@@ -39,12 +45,12 @@ namespace Avalonia.Utilities
{
while (!_pendingValues.Empty)
{
- updated = handler.Update(source, property, ref backing, _pendingValues.Dequeue());
+ SetAndRaisePropertyChanged(source, property, ref backing, _pendingValues.Dequeue());
}
}
}
- return updated;
+ return true;
}
_pendingValues.Enqueue(value);
@@ -71,14 +77,5 @@ namespace Avalonia.Utilities
_setter._isNotifying = false;
}
}
-
- public interface ISetterHandler
- {
- bool Update(
- AvaloniaObject source,
- AvaloniaProperty property,
- ref TSetRecord backing,
- TSetRecord value);
- }
}
}
diff --git a/src/Avalonia.Base/ValueStore.cs b/src/Avalonia.Base/ValueStore.cs
index b2c4c68f9c..b7f5c26801 100644
--- a/src/Avalonia.Base/ValueStore.cs
+++ b/src/Avalonia.Base/ValueStore.cs
@@ -33,13 +33,13 @@ namespace Avalonia
{
priorityValue = CreatePriorityValue(property);
priorityValue.SetValue(v, (int)BindingPriority.LocalValue);
- _propertyValues.SetValueInternal(property, priorityValue);
+ _propertyValues.SetValue(property, priorityValue);
}
}
else
{
priorityValue = CreatePriorityValue(property);
- _propertyValues.AddValueInternal(property, priorityValue);
+ _propertyValues.AddValue(property, priorityValue);
}
return priorityValue.Add(source, (int)priority);
@@ -57,7 +57,7 @@ namespace Avalonia
{
if (priority == (int)BindingPriority.LocalValue)
{
- _propertyValues.SetValueInternal(property, Validate(property, value));
+ _propertyValues.SetValue(property, Validate(property, value));
Changed(property, priority, v, value);
return;
}
@@ -65,7 +65,7 @@ namespace Avalonia
{
priorityValue = CreatePriorityValue(property);
priorityValue.SetValue(v, (int)BindingPriority.LocalValue);
- _propertyValues.SetValueInternal(property, priorityValue);
+ _propertyValues.SetValue(property, priorityValue);
}
}
}
@@ -78,14 +78,14 @@ namespace Avalonia
if (priority == (int)BindingPriority.LocalValue)
{
- _propertyValues.AddValueInternal(property, Validate(property, value));
+ _propertyValues.AddValue(property, Validate(property, value));
Changed(property, priority, AvaloniaProperty.UnsetValue, value);
return;
}
else
{
priorityValue = CreatePriorityValue(property);
- _propertyValues.AddValueInternal(property, priorityValue);
+ _propertyValues.AddValue(property, priorityValue);
}
}
@@ -187,7 +187,7 @@ namespace Avalonia
var newDeferredSetter = new DeferredSetterOptimized();
- _deferredSetters.AddValueInternal(property, newDeferredSetter);
+ _deferredSetters.AddValue(property, newDeferredSetter);
return newDeferredSetter;
}
diff --git a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj
index 6550a23b7b..f503bf66a7 100644
--- a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj
+++ b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj
@@ -18,7 +18,7 @@
-
+
diff --git a/tests/Avalonia.Benchmarks/Base/DirectPropertyBenchmark.cs b/tests/Avalonia.Benchmarks/Base/DirectPropertyBenchmark.cs
index 4f36b54414..ecf8a1fb2b 100644
--- a/tests/Avalonia.Benchmarks/Base/DirectPropertyBenchmark.cs
+++ b/tests/Avalonia.Benchmarks/Base/DirectPropertyBenchmark.cs
@@ -79,4 +79,4 @@ namespace Avalonia.Benchmarks.Base
}
}
}
-}
\ No newline at end of file
+}