namespace Gready_Poang.Common;

public class BehaviorBase<T> : Behavior<T> where T : BindableObject
{
    public T? AssociatedObject { get; private set; }

    protected override void OnAttachedTo(T bindable)
    {
        base.OnAttachedTo(bindable);
        AssociatedObject = bindable;

        if (bindable.BindingContext != null)
            BindingContext = bindable.BindingContext;

        bindable.BindingContextChanged += OnBindingContextChanged;
    }

    protected override void OnDetachingFrom(T bindable)
    {
        base.OnDetachingFrom(bindable);
        bindable.BindingContextChanged -= OnBindingContextChanged;
        AssociatedObject = null;
    }

    void OnBindingContextChanged(object? sender, EventArgs e)
    {
        if (AssociatedObject != null)
            BindingContext = AssociatedObject.BindingContext;
    }
}
