Раньше в приложениях Windows Phone 8.0 мы могли перейти на ту же страницу глубже следующим образом:

NavigationService.Navigate(new Uri("/SamePage.xaml", UriKind.Relative));

Страница была кэширована автоматически, поэтому после перехода назад пользователь находился на той же позиции в списке, когда уходил.

Но в Windows Phone Store Apps мы переходим к той же странице следующим образом:

Frame.Navigate(typeof(SamePage), id);

Но после возврата он снова загружает данные, поэтому, если пользователь был в середине длинного списка, теперь он находится наверху:

private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
    // TODO: Create an appropriate data model for your problem domain to replace the sample data.
    var group = await SampleDataSource.GetGroupAsync((string)e.NavigationParameter);
    this.DefaultViewModel["Group"] = group;
}

Как я могу кэшировать страницу, как это было раньше, чтобы пользователь находился на той же позиции в списке, где он оставил?

(Я также включил приложения для Windows, потому что они знакомы с ним издавна).

4
user3293835 2 Май 2014 в 15:12

2 ответа

Лучший ответ

В конструкторе страницы вам нужно указать

    public MainPage()
    {
       this.InitializeComponent();
       this.NavigationCacheMode = NavigationCacheMode.Required;
    }
6
Timay 4 Май 2014 в 20:53

В App.cs вы можете установить RootFrame.CacheSize, который подсказывает ОС, сколько страниц следует попытаться сохранить в кеше. Также вам, вероятно, не следует сбрасывать текст данных в NavigationHelper_LoadState - этот метод вызывается каждый раз, когда вы переходите на страницу, даже если вы возвращаетесь назад.

0
HDW Production 2 Май 2014 в 13:49