|
|
@@ -4,6 +4,7 @@
|
|
|
using System;
|
|
|
using System.Collections;
|
|
|
using System.Collections.Specialized;
|
|
|
+using System.Reactive.Linq;
|
|
|
using Avalonia.Controls.Primitives;
|
|
|
using Avalonia.Controls.Utils;
|
|
|
using Avalonia.Input;
|
|
|
@@ -17,6 +18,7 @@ namespace Avalonia.Controls.Presenters
|
|
|
internal abstract class ItemVirtualizer : IVirtualizingController, IDisposable
|
|
|
{
|
|
|
private double _crossAxisOffset;
|
|
|
+ private IDisposable _subscriptions;
|
|
|
|
|
|
/// <summary>
|
|
|
/// Initializes a new instance of the <see cref="ItemVirtualizer"/> class.
|
|
|
@@ -27,6 +29,15 @@ namespace Avalonia.Controls.Presenters
|
|
|
Owner = owner;
|
|
|
Items = owner.Items;
|
|
|
ItemCount = owner.Items.Count();
|
|
|
+
|
|
|
+ var panel = VirtualizingPanel;
|
|
|
+
|
|
|
+ if (panel != null)
|
|
|
+ {
|
|
|
+ _subscriptions = panel.GetObservable(Panel.BoundsProperty)
|
|
|
+ .Skip(1)
|
|
|
+ .Subscribe(_ => InvalidateScroll());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -240,6 +251,9 @@ namespace Avalonia.Controls.Presenters
|
|
|
/// <inheritdoc/>
|
|
|
public virtual void Dispose()
|
|
|
{
|
|
|
+ _subscriptions?.Dispose();
|
|
|
+ _subscriptions = null;
|
|
|
+
|
|
|
if (VirtualizingPanel != null)
|
|
|
{
|
|
|
VirtualizingPanel.Controller = null;
|