Browse Source

Fix for #834.

Listen for bounds changes on the `VirtualizingPanel` and update the
scroll accordingly.
Steven Kirk 9 years ago
parent
commit
49757372a9
1 changed files with 14 additions and 0 deletions
  1. 14 0
      src/Avalonia.Controls/Presenters/ItemVirtualizer.cs

+ 14 - 0
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;
 
         /// <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;