diff --git a/src/Avalonia.Base/AvaloniaPropertyChangedEventArgs.cs b/src/Avalonia.Base/AvaloniaPropertyChangedEventArgs.cs
index c2bb1e9b01..3d04fe74f1 100644
--- a/src/Avalonia.Base/AvaloniaPropertyChangedEventArgs.cs
+++ b/src/Avalonia.Base/AvaloniaPropertyChangedEventArgs.cs
@@ -27,11 +27,6 @@ namespace Avalonia
IsEffectiveValueChange = isEffectiveValueChange;
}
- internal void SetSender(AvaloniaObject sender)
- {
- Sender = sender;
- }
-
///
/// Gets the that the property changed on.
///
@@ -65,6 +60,16 @@ namespace Avalonia
public BindingPriority Priority { get; private set; }
internal bool IsEffectiveValueChange { get; private set; }
+
+ ///
+ /// Sets the Sender property.
+ /// This is purely for reuse in some code paths where multiple allocations may occur.
+ ///
+ /// The sender object.
+ internal void SetSender(AvaloniaObject sender)
+ {
+ Sender = sender;
+ }
protected abstract AvaloniaProperty GetProperty();
protected abstract object? GetOldValue();
diff --git a/src/Avalonia.Base/PropertyStore/ValueStore.cs b/src/Avalonia.Base/PropertyStore/ValueStore.cs
index 7c458d176b..1af99366e7 100644
--- a/src/Avalonia.Base/PropertyStore/ValueStore.cs
+++ b/src/Avalonia.Base/PropertyStore/ValueStore.cs
@@ -592,11 +592,12 @@ namespace Avalonia.PropertyStore
var count = children.Count;
- var args = GetPropertyChangedEventArgs(Owner, property, oldValue, value.Value);
+ var apArgs = new AvaloniaPropertyChangedEventArgs(Owner, property, oldValue, value.Value, BindingPriority.Inherited, true);
+ var incpArgs = new PropertyChangedEventArgs(property.Name);
for (var i = 0; i < count; ++i)
{
- children[i].GetValueStore().OnAncestorInheritedValueChanged(args.apArgs, args.incpArgs);
+ children[i].GetValueStore().OnAncestorInheritedValueChanged(apArgs, incpArgs);
}
}
@@ -616,12 +617,13 @@ namespace Avalonia.PropertyStore
if (children is not null)
{
var count = children.Count;
-
- var args = GetPropertyChangedEventArgs(Owner, property, oldValue, newValue);
+
+ var apArgs = new AvaloniaPropertyChangedEventArgs(Owner, property, oldValue, newValue, BindingPriority.Inherited, true);
+ var incpArgs = new PropertyChangedEventArgs(property.Name);
for (var i = 0; i < count; ++i)
{
- children[i].GetValueStore().OnAncestorInheritedValueChanged(args.apArgs, args.incpArgs);
+ children[i].GetValueStore().OnAncestorInheritedValueChanged(apArgs, incpArgs);
}
}
}
@@ -644,25 +646,13 @@ namespace Avalonia.PropertyStore
}
}
}
-
- private (AvaloniaPropertyChangedEventArgs apArgs, PropertyChangedEventArgs? incpArgs)
- GetPropertyChangedEventArgs(AvaloniaObject sender,
- StyledProperty property,
- T oldValue,
- T newValue)
- {
- Debug.Assert(property.Inherits);
-
- return new (new AvaloniaPropertyChangedEventArgs(sender, property, oldValue, newValue, BindingPriority.Inherited, true), new PropertyChangedEventArgs(property.Name));
- }
///
/// Called when an inherited property changes on the value store of the inheritance ancestor.
///
/// The property type.
- /// The property.
- /// The old value of the property.
- /// The new value of the property.
+ /// Avalonia Property EventArgs to reuse.
+ /// PropertyChangedEventArgs to reuse
public void OnAncestorInheritedValueChanged(AvaloniaPropertyChangedEventArgs apArgs, PropertyChangedEventArgs? args)
{