Как сохранить страницу с полным состоянием в навигационном приложении wpf
-
21-08-2019 - |
Вопрос
Я создаю приложение 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'.
Что я делаю не так?
Решение
Вам нужно сообщить главному приложению, что страница должна сохраняться в памяти, а не «выгружаться» каждый раз, когда вы уходите, и «перезагружаться», когда вы возвращаетесь к ней.Это оказывается довольно просто:Просто добавьте KeepAlive атрибут объявления вашей страницы:
<Page x:Class="..." KeepAlive="True">
Интересно, что в документации MSDN говорится следующее:
Страницы, которые создаются и ориентируются на использование только кода (например, вызов навигации), автоматически сохраняются в живых.
Я не обнаружил, что это так, и, судя по вашему вопросу, похоже, что вы тоже не так считаете.