diff --git a/src/Avalonia.Controls/Presenters/ItemVirtualizer.cs b/src/Avalonia.Controls/Presenters/ItemVirtualizer.cs index 3a2cb688cb..c4edaf5387 100644 --- a/src/Avalonia.Controls/Presenters/ItemVirtualizer.cs +++ b/src/Avalonia.Controls/Presenters/ItemVirtualizer.cs @@ -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; /// /// Initializes a new instance of the 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()); + } } /// @@ -240,6 +251,9 @@ namespace Avalonia.Controls.Presenters /// public virtual void Dispose() { + _subscriptions?.Dispose(); + _subscriptions = null; + if (VirtualizingPanel != null) { VirtualizingPanel.Controller = null;