|
|
|
@ -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<INameScope>(); |
|
|
|
var provideValueTarget = serviceProvider.GetService<IProvideValueTarget>(); |
|
|
|
|
|
|
|
|
|
|
|
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<IProvideValueTarget>(); |
|
|
|
var target = provideValueTarget.TargetObject; |
|
|
|
var property = provideValueTarget.TargetProperty as IPropertyInfo; |
|
|
|
|
|
|
|
if (property != null) |
|
|
|
value.OnCompleted(() => property.Set(target, value.GetResult())); |
|
|
|
|
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|