DisposingBehavior.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System.Reactive.Disposables;
  2. using Avalonia.Xaml.Interactivity;
  3. namespace Avalonia.Xaml.Interactions.Custom;
  4. /// <summary>
  5. /// A base class for behaviors with disposable resources.
  6. /// </summary>
  7. /// <typeparam name="T">The object type to attach to</typeparam>
  8. public abstract class DisposingBehavior<T> : StyledElementBehavior<T> where T : AvaloniaObject
  9. {
  10. private CompositeDisposable? _disposables;
  11. /// <inheritdoc />
  12. protected override void OnAttached()
  13. {
  14. base.OnAttached();
  15. _disposables?.Dispose();
  16. _disposables = new CompositeDisposable();
  17. OnAttached(_disposables);
  18. }
  19. /// <summary>
  20. /// Called after the behavior is attached to the <see cref="IBehavior.AssociatedObject"/>.
  21. /// </summary>
  22. /// <param name="disposables">The group of disposable resources that are disposed together.</param>
  23. protected abstract void OnAttached(CompositeDisposable disposables);
  24. /// <inheritdoc />
  25. protected override void OnDetaching()
  26. {
  27. base.OnDetaching();
  28. _disposables?.Dispose();
  29. }
  30. }