Como manter a página com o estado completo no aplicativo de navegação WPF
-
21-08-2019 - |
Pergunta
Eu estou criando um aplicativo WPF usando páginas e o serviço de navegação.
Uma das páginas tomar um objeto como um construtor
Sub New(ByVal o As Object)
' This call is required by the Windows Form Designer.
InitializeComponent()
....
Assim, para navegar até ele eu faço
Dim MyPage As New Page1(MyObject)
MyBase.NavigationService.Navigate(MyPage)
O problema ocorre quando eu estou editando algo na página e voltar, e o atacante MyPage eu recebo o seguinte erro:
Cannot create object of type 'Page1'. CreateInstance failed, which can be
caused by not having a public default constructor for 'Page1'.
O que estou fazendo de errado?
Solução
Você precisa dizer o aplicativo host que a página deve persistir na memória, em vez de ser "descarregado" cada vez que você navegar para fora e "recarregado" quando você voltar a ele. Que acaba por ser bastante fácil: basta adicionar o KeepAlive atributo para a sua declaração de página:
<Page x:Class="..." KeepAlive="True">
Curiosamente, a documentação MSDN diz o seguinte:
Páginas que são instanciado e navegado para usando apenas código (para exemplo, chamando Navigate), são automaticamente mantido vivo.
Eu não achei que ser o caso, e de sua pergunta, parece que você não está encontrando-lo dessa maneira também.