Как сохранить страницу с полным состоянием в приложении навигации wpf

Я создаю приложение WPF, используя страницы и службу навигации.
Одна из страниц принимает объект в качестве конструктора.

Sub New(ByVal o As Object)
    ' This call is required by the Windows Form Designer.
    InitializeComponent()

    ....

Итак, чтобы перейти к нему, я делаю

    Dim MyPage As New Page1(MyObject)
    MyBase.NavigationService.Navigate(MyPage)

Проблема возникает, когда я редактирую что-то на странице и возвращаюсь назад, а при переходе на MyPage я получаю следующую ошибку:

 Cannot create object of type 'Page1'. CreateInstance failed, which can be 
 caused by not having a public default constructor for 'Page1'.  

Что я делаю неправильно?


person Eduardo Molteni    schedule 13.05.2009    source источник


Ответы (1)


Вам нужно сообщить хост-приложению, что страница должна сохраняться в памяти, а не «выгружаться» каждый раз, когда вы уходите, и «перезагружаться», когда вы возвращаетесь к ней. Это оказывается довольно просто: просто добавьте KeepAlive к объявлению вашей страницы:

<Page x:Class="..." KeepAlive="True">

Интересно, что в документации MSDN сказано следующее:

Страницы, экземпляры которых создаются и на которые осуществляется переход с использованием только кода (например, вызов Navigate), автоматически поддерживаются в рабочем состоянии.

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

person Matt Hamilton    schedule 13.05.2009
comment
Решено! Спасибо! Удивительно. Даже в книге WPF Unleashed говорится то же самое, что и в MSDN. - person Eduardo Molteni; 14.05.2009
comment
Почему я так долго не мог это найти, спасибо!! - person Jeff Anderson; 13.11.2014