diff --git a/src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/ResolveByNameExtension.cs b/src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/ResolveByNameExtension.cs index 33263b6a27..2b5d1ced3a 100644 --- a/src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/ResolveByNameExtension.cs +++ b/src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/ResolveByNameExtension.cs @@ -1,5 +1,6 @@ using System; using Avalonia.Controls; +using Avalonia.Data.Core; namespace Avalonia.Markup.Xaml.MarkupExtensions { @@ -15,26 +16,20 @@ namespace Avalonia.Markup.Xaml.MarkupExtensions public object ProvideValue(IServiceProvider serviceProvider) { var namescope = serviceProvider.GetService(); - var provideValueTarget = serviceProvider.GetService(); - + var value = namescope.FindAsync(Name); if(value.IsCompleted) - { return value.GetResult(); - } - else - { - value.OnCompleted(() => - { - if(provideValueTarget is AvaloniaObject ao) - { - ao.SetValue(provideValueTarget.TargetProperty as AvaloniaProperty, value); - } - }); - return null; - } + var provideValueTarget = serviceProvider.GetService(); + var target = provideValueTarget.TargetObject; + var property = provideValueTarget.TargetProperty as IPropertyInfo; + + if (property != null) + value.OnCompleted(() => property.Set(target, value.GetResult())); + + return null; } } }