Страницы навигации WPF - PullRequest
0 голосов
/ 22 апреля 2020

В моем проекте у меня есть две страницы, page1 и page2. Навигация между страницами управляется фреймом.

У меня есть заметки, что когда я перехожу со страницы 1 на страницу 2, а затем возвращаюсь на страницу 1 мой конструктор вызова программы page1 () каждый раз, и это проблема, потому что страница 1 у меня есть модель представления с несколькими привязками, и на странице 1 также отображается TreeView с большим количеством элементов, и это вызывает медленное переключение между страницами.

Я пробовал с KeepAlive = "True", но в моем случае проблема это то же самое, и конструктор page1 () вызывается каждый раз.

private void Navigate(ViewerMode viewerMode)
    {
        if (_lastViewerMode == viewerMode) return;

        var window = (Application.Current.MainWindow);
        var frame = ((MainWindow)window).Frame;

        var rawPageUri = _uriPath[viewerMode];

        var pageUri = new Uri(rawPageUri, UriKind.Relative);

        frame.Navigate(pageUri);

        _lastViewerMode = viewerMode;
    }

    private readonly IReadOnlyDictionary<ViewerMode, string> _uriPath = new Dictionary<ViewerMode, string>
    {
        {ViewerMode.OnlinePage,          "Views/Activities.xaml"},
        {ViewerMode.OfflinePage,         "Views/OfflineActivities.xaml"}
    };

это мой метод навигации, с помощью которого я перемещаюсь от Activity.xaml к страницам OffliceActivities.xaml на основе параметра ViewerMode. В этом случае я использовал URI, а не объекты.

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

Спасибо.

...