Fix PageUp and PageDown wrapping past result boundaries
Fixes #4717.
PageUp and PageDown stop at the first and last results instead of wrapping around. Up and Down arrow navigation retains its existing wraparound behavior, and empty lists remain unselected.
Page navigation calculates and assigns its target under the existing collection synchronization lock. The background refresh now keeps collection updates, initial selection, and visibility changes in that same transaction, so a delayed refresh initialization cannot overwrite a page selection made after the refresh.
Validation on Windows with .NET SDK 9.0.319:
- All 20 navigation regression cases passed.
- Both new cases call the real AddResults refresh path and verify paging waits for the initial selection/visibility transition; both failed before the refresh fix and passed afterward.
- Full test project: 500 passed, 0 failed; 9 existing explicit Windows dialog tests were not executed (509 discovered).
- Release solution build succeeded (0 errors); git diff --check passed.
- Manual running-app interaction has not been verified.
The upstream GitHub Actions Build was waiting for maintainer approval for this fork contribution. Local validation does not replace that required upstream approval.
Prepared with AI assistance.