diff --git a/src/Avalonia.Base/StyledProperty.cs b/src/Avalonia.Base/StyledProperty.cs
index 8e0ecf5544..ad1f09066e 100644
--- a/src/Avalonia.Base/StyledProperty.cs
+++ b/src/Avalonia.Base/StyledProperty.cs
@@ -194,45 +194,48 @@ namespace Avalonia
}
///
- [UnconditionalSuppressMessage("Trimming", "IL2026", Justification = TrimmingMessages.ImplicitTypeConvertionSupressWarningMessage)]
internal override IDisposable? RouteSetValue(
AvaloniaObject target,
object? value,
BindingPriority priority)
{
- if (value == BindingOperations.DoNothing)
- {
- return null;
- }
- else if (value == UnsetValue)
- {
- target.ClearValue(this);
- return null;
- }
- else if (TypeUtilities.TryConvertImplicit(PropertyType, value, out var converted))
- {
- return target.SetValue(this, (TValue)converted!, priority);
- }
- else
- {
- var type = value?.GetType().FullName ?? "(null)";
- throw new ArgumentException($"Invalid value for Property '{Name}': '{value}' ({type})");
- }
+ if (ShouldSetValue(target, value, out var converted))
+ return target.SetValue(this, converted, priority);
+ return null;
}
- [UnconditionalSuppressMessage("Trimming", "IL2026", Justification = TrimmingMessages.ImplicitTypeConvertionSupressWarningMessage)]
internal override void RouteSetCurrentValue(AvaloniaObject target, object? value)
{
- if (value == BindingOperations.DoNothing)
- return;
+ if (ShouldSetValue(target, value, out var converted))
+ target.SetCurrentValue(this, converted);
+ }
+
+ internal override IDisposable RouteBind(
+ AvaloniaObject target,
+ IObservable