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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top