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); } } }