From ed7f6c0af4b80be2b0302cf15ecf6b816819ee2f Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Mon, 8 Jun 2020 17:21:29 +0200 Subject: [PATCH] Fix LayoutUpdated subscriptions. And don't call `OnEffectiveViewportChanged` if viewport unchanged. --- src/Avalonia.Controls/Repeater/ViewportManager.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/Repeater/ViewportManager.cs b/src/Avalonia.Controls/Repeater/ViewportManager.cs index 6677b8fea7..57ac1cf2a5 100644 --- a/src/Avalonia.Controls/Repeater/ViewportManager.cs +++ b/src/Avalonia.Controls/Repeater/ViewportManager.cs @@ -288,6 +288,7 @@ namespace Avalonia.Controls private void OnLayoutUpdated(object sender, EventArgs args) { _owner.LayoutUpdated -= OnLayoutUpdated; + _layoutUpdatedSubscribed = false; if (_managingViewportDisabled) { return; @@ -424,6 +425,7 @@ namespace Avalonia.Controls if (_layoutUpdatedSubscribed) { _owner.LayoutUpdated -= OnLayoutUpdated; + _layoutUpdatedSubscribed = false; } } @@ -538,7 +540,12 @@ namespace Avalonia.Controls private void ScrollContentPresenterPreArrange(object sender, EventArgs e) { var scp = (ScrollContentPresenter)sender; - OnEffectiveViewportChanged(new Rect((Point)scp.Offset, scp.Viewport)); + var effectiveViewport = new Rect((Point)scp.Offset, scp.Viewport); + + if (effectiveViewport != _visibleWindow) + { + OnEffectiveViewportChanged(effectiveViewport); + } } private class ScrollerInfo