using System.Reactive.Disposables; using Avalonia.Controls; namespace Avalonia.Xaml.Interactions.Custom; /// /// /// public abstract class ItemsControlContainerEventsBehavior : DisposingBehavior { /// protected override void OnAttached(CompositeDisposable disposables) { if (AssociatedObject is not { } itemsControl) { return; } itemsControl.ContainerPrepared += ItemsControlOnContainerPrepared; itemsControl.ContainerIndexChanged += ItemsControlOnContainerIndexChanged; itemsControl.ContainerClearing += ItemsControlOnContainerClearing; disposables.Add(Disposable.Create(() => { itemsControl.ContainerPrepared -= ItemsControlOnContainerPrepared; itemsControl.ContainerIndexChanged -= ItemsControlOnContainerIndexChanged; itemsControl.ContainerClearing -= ItemsControlOnContainerClearing; })); } private void ItemsControlOnContainerPrepared(object? sender, ContainerPreparedEventArgs e) { OnContainerPrepared(sender, e); } private void ItemsControlOnContainerIndexChanged(object sender, ContainerIndexChangedEventArgs e) { OnContainerIndexChanged(sender, e); } private void ItemsControlOnContainerClearing(object? sender, ContainerClearingEventArgs e) { OnContainerClearing(sender, e); } /// /// /// /// /// protected virtual void OnContainerPrepared(object? sender, ContainerPreparedEventArgs e) { } /// /// /// /// /// protected virtual void OnContainerIndexChanged(object? sender, ContainerIndexChangedEventArgs e) { } /// /// /// /// /// protected virtual void OnContainerClearing(object? sender, ContainerClearingEventArgs e) { } }