PageStorageKey был бы самым простым способом.
Чтобы Listview делал то же самое, сохраняйте смещение каждого listView в mainPage, а затем при каждом изменении страницы перестраивайте страницу с помощью контроллера прокрутки в представлении списка, указывающего насохраненное смещение.