2009-05-13 1 views
3

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

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'. 

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

ответ

5

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

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

Интересно, что в документации MSDN говорит, что это:

Pages that are instantiated and navigated to using only code (for example, calling Navigate), are automatically kept alive.

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

+0

Решенный! Благодаря! Удивительно. Даже книга WPF Unleashed говорит то же, что и MSDN. –

+0

Почему мне так долго нужно было это найти, спасибо! –

Смежные вопросы