using System.Reactive.Disposables;
using Avalonia.Controls;
using Avalonia.Data;
namespace Avalonia.Xaml.Interactions.Custom;
///
///
///
public class BindingBehavior : AttachedToVisualTreeBehavior
{
///
///
///
public static readonly StyledProperty TargetPropertyProperty =
AvaloniaProperty.Register(nameof(TargetProperty));
///
///
///
public static readonly StyledProperty TargetObjectProperty =
AvaloniaProperty.Register(nameof(TargetObject));
///
///
///
public static readonly StyledProperty BindingProperty =
AvaloniaProperty.Register(nameof(Binding));
///
///
///
public AvaloniaProperty? TargetProperty
{
get => GetValue(TargetPropertyProperty);
set => SetValue(TargetPropertyProperty, value);
}
///
///
///
[ResolveByName]
public AvaloniaObject? TargetObject
{
get => GetValue(TargetObjectProperty);
set => SetValue(TargetObjectProperty, value);
}
///
///
///
[AssignBinding]
public IBinding? Binding
{
get => GetValue(BindingProperty);
set => SetValue(BindingProperty, value);
}
///
///
///
///
protected override void OnAttachedToVisualTree(CompositeDisposable disposable)
{
if (TargetObject is not null && TargetProperty is not null && Binding is not null)
{
var dispose = TargetObject.Bind(TargetProperty, Binding);
disposable.Add(dispose);
}
}
}