Browse Source

Fix for #834.

Listen for bounds changes on the `VirtualizingPanel` and update the
scroll accordingly.
pull/839/head
Steven Kirk 9 years ago
parent
commit
49757372a9
  1. 14
      src/Avalonia.Controls/Presenters/ItemVirtualizer.cs

14
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;

Loading…
Cancel
Save