Использование NavigationWindow со страницами

В проекте много Page производные классы и MainWindow это NavigationWindow,

Должны ли быть действительно Navigate(new PageDerivedClass())в коде или должен иерархический Page дерево будет построено раньше?

Если я вернусь и сделаю то же самое снова, чтобы создать новыйPageDerivedClassРазве приложение не должно как-то обрабатывать этот случай и использовать уже созданную страницу вместо создания новой?

Насколько я вижу, недавно созданная страница не GarbageCollected, так как вы все еще можете перемещаться по стрелкам NavigationWindow,

Это как-то протекает?

Как правильно его использовать? MSDN здесь не очень полезен.

1 ответ

Решение

NavigationWindow не сохраняет экземпляр объекта контента в истории навигации. Вместо этого NavigationWindow создает новый экземпляр объекта содержимого каждый раз, когда к нему осуществляется переход с использованием истории переходов. Это поведение предназначено для предотвращения чрезмерного потребления памяти при переходе к большим числам и большим частям контента. Следовательно, состояние содержимого не запоминается при переходе от одной навигации к другой. Однако WPF предоставляет несколько методов, с помощью которых вы можете сохранить часть состояния для части контента в истории навигации. (Источник MSDN)

Если вы действительно хотите избежать создания новых каждый раз, вы также можете создавать экземпляры различных страниц (Page1, Page2 и т. Д.) И сохранять их в своем объекте Application, а затем переключаться на них следующим образом:

 NavigationSerivce.Navigate(App.Page2);

Soruce: Stackru ответ

Другие вопросы по тегам