Files
Toolkit2/Framework/Avalonia/Markups/ParameterBindingExtension.cs
T
2022-12-10 16:19:59 +00:00

42 lines
1.1 KiB
C#

using Avalonia;
using Avalonia.Controls;
using Avalonia.Data;
using Avalonia.Markup.Xaml;
using Toolkit.Framework.Foundation;
namespace Toolkit.Framework.Avalonia;
public class ParameterBindingExtension : MarkupExtension, IParameter
{
private static readonly AttachedProperty<object> ValueProperty =
AvaloniaProperty.RegisterAttached<ParameterBindingExtension, Control, object>("Value");
private readonly Binding? valueBinding;
public ParameterBindingExtension(string key, object value)
{
Key = key;
valueBinding = value.ToBinding();
}
public string? Key { get; }
public KeyValuePair<string, object>? GetValue(object target)
{
if (target is AvaloniaObject avaloniaObject)
{
if (valueBinding is not null)
{
avaloniaObject.Bind(ValueProperty, valueBinding);
return new KeyValuePair<string, object>(Key, (dynamic)avaloniaObject.GetValue(ValueProperty));
}
}
return default;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}