diff --git a/Terminal.Gui/Views/ListView.cs b/Terminal.Gui/Views/ListView.cs
index efb6a9e51..46105215b 100644
--- a/Terminal.Gui/Views/ListView.cs
+++ b/Terminal.Gui/Views/ListView.cs
@@ -165,13 +165,13 @@ public class ListView : View, IDesignable
// Use the form of Add that lets us pass context to the handler
KeyBindings.Add (Key.A.WithCtrl, new KeyBinding ([Command.SelectAll], KeyBindingScope.Focused, true));
KeyBindings.Add (Key.U.WithCtrl, new KeyBinding ([Command.SelectAll], KeyBindingScope.Focused, false));
-
- SubviewsLaidOut += ListView_LayoutComplete;
}
- private void ListView_LayoutComplete (object sender, LayoutEventArgs e)
+ ///
+ protected override void OnFrameChanged (in Rectangle frame)
{
SetContentSize (new Size (MaxLength, _source?.Count ?? Viewport.Height));
+ EnsureSelectedItemVisible ();
}
/// Gets or sets whether this allows items to be marked.
@@ -394,23 +394,13 @@ public class ListView : View, IDesignable
/// Ensures the selected item is always visible on the screen.
public void EnsureSelectedItemVisible ()
{
- // TODO: This check is not needed.
- if (SuperView?.IsInitialized == true)
+ if (_selected < Viewport.Y)
{
- if (_selected <= Viewport.Y)
- {
- Viewport = Viewport with { Y = _selected };
- }
- else if (Viewport.Height > 0 && _selected >= Viewport.Y + Viewport.Height)
- {
- Viewport = Viewport with { Y = _selected - Viewport.Height + 1 };
- }
-
- SubviewLayout -= ListView_LayoutStarted;
+ Viewport = Viewport with { Y = _selected };
}
- else
+ else if (Viewport.Height > 0 && _selected >= Viewport.Y + Viewport.Height)
{
- SubviewLayout += ListView_LayoutStarted;
+ Viewport = Viewport with { Y = _selected - Viewport.Height + 1 };
}
}