ItemsControlContainerEventsBehavior.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using System.Reactive.Disposables;
  2. using Avalonia.Controls;
  3. namespace Avalonia.Xaml.Interactions.Custom;
  4. /// <summary>
  5. ///
  6. /// </summary>
  7. public abstract class ItemsControlContainerEventsBehavior : DisposingBehavior<ItemsControl>
  8. {
  9. /// <inheritdoc />
  10. protected override void OnAttached(CompositeDisposable disposables)
  11. {
  12. if (AssociatedObject is not { } itemsControl)
  13. {
  14. return;
  15. }
  16. itemsControl.ContainerPrepared += ItemsControlOnContainerPrepared;
  17. itemsControl.ContainerIndexChanged += ItemsControlOnContainerIndexChanged;
  18. itemsControl.ContainerClearing += ItemsControlOnContainerClearing;
  19. disposables.Add(Disposable.Create(() =>
  20. {
  21. itemsControl.ContainerPrepared -= ItemsControlOnContainerPrepared;
  22. itemsControl.ContainerIndexChanged -= ItemsControlOnContainerIndexChanged;
  23. itemsControl.ContainerClearing -= ItemsControlOnContainerClearing;
  24. }));
  25. }
  26. private void ItemsControlOnContainerPrepared(object? sender, ContainerPreparedEventArgs e)
  27. {
  28. OnContainerPrepared(sender, e);
  29. }
  30. private void ItemsControlOnContainerIndexChanged(object sender, ContainerIndexChangedEventArgs e)
  31. {
  32. OnContainerIndexChanged(sender, e);
  33. }
  34. private void ItemsControlOnContainerClearing(object? sender, ContainerClearingEventArgs e)
  35. {
  36. OnContainerClearing(sender, e);
  37. }
  38. /// <summary>
  39. ///
  40. /// </summary>
  41. /// <param name="sender"></param>
  42. /// <param name="e"></param>
  43. protected virtual void OnContainerPrepared(object? sender, ContainerPreparedEventArgs e)
  44. {
  45. }
  46. /// <summary>
  47. ///
  48. /// </summary>
  49. /// <param name="sender"></param>
  50. /// <param name="e"></param>
  51. protected virtual void OnContainerIndexChanged(object? sender, ContainerIndexChangedEventArgs e)
  52. {
  53. }
  54. /// <summary>
  55. ///
  56. /// </summary>
  57. /// <param name="sender"></param>
  58. /// <param name="e"></param>
  59. protected virtual void OnContainerClearing(object? sender, ContainerClearingEventArgs e)
  60. {
  61. }
  62. }