Introdução
Conforme já abordamos neste artigo, o modelo de execução do Windows Phone 7 permite que apenas uma aplicação seja executada por vez, ou seja, no momento em que o usuário navega para fora de sua aplicação ela é desativada e possibilita o tombstone. Porém já abordamos no artigo citado anteriormente, que é possível controlar essa desativação e reativação da aplicação, salvando o estado da página em que o usuário se encontra. Nosso objetivo será mostrar como é possível realizar esse controle. Criando a aplicação inicial Para que seja possível demonstrar o recurso de restauração de Page State, vamos inicialmente criar uma aplicação simples. Para isso siga os seguintes passos:
- Crie uma aplicação do tipo Windows Phone Application;
- Adicione ao seu ContentPanel, os seguintes controles, com suas respectivas configurações:
- TextBlock
- Text="Nome"
- Margin="12, 9, 0, 0"
- TextBox
- TextBlock
- Text="Data de saída"
- Margin="12, 9, 0, 0"
- TextBlock
- x:Name="lblData"
- Margin="12, 9, 0, 0"
- Seu xaml deve estar semelhante a este:
<stackpanel x:name="TitlePanel" grid.row="0" margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION"
Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="page name"
Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</stackpanel>
<!--ContentPanel - place additional content here-->
<stackpanel x:name="ContentPanel" grid.row="1" margin="12,0,12,0">
<TextBlock Text="Nome" Margin="12,9,0,0" />
<TextBox x:Name="txtNome" />
<TextBlock Text="Data de saída" Margin="12,9,0,0" />
<TextBlock x:Name="lblData" Margin="12,9,0,0" />
</stackpanel>
Feito isso já podemos testar nosso aplicativo. Para isso pressione F5.
Com sua aplicação devidamente inicializada no emulador, preencha o campo Nome e clique no botão Start.

Clique no botão Back. Como poderá perceber, seu nome não estará mais preenchido. Lembrando que isso deve-se ao fato de que no momento em que clicamos no botão Start, nossa aplicação foi desativada pelo Windows Phone.
Salvando o estado da página
Para que possamos resolver o problema apresentado e dar a impressão ao nosso usuário de que nossa aplicação não foi desativada, será necessário implementarmos o armazenamento do estado de página, ou Page State.
Antes de apresentarmos o código para a resolução do problema, devemos entender qual o padrão que deveremos utilizar.
A classe PhoneApplicationPage possui dois métodos muito importantes para nós, o OnNavigateFrom e o OnNavigateTo. Basicamente o que teremos que fazer é sobrescrevê-los, ou seja, realizar um override e implementar o código para salvar e recuperar o estado da página, respectivamente.
Vamos colocar a mão na massa e resolver nosso problema:
- Abra o código da sua página e declare uma variável do tipo bool, com valor inicial false; bool novaInstancia = false;
bool novaInstancia = false;
- No construtor na classe defina o valor da sua variável para true. Com isso iremos controlar se é a primeira vez que a página está sendo exibida, ou seja, a aplicação acabou de ser aberta, ou se o usuário está retornando à esta página pois estava navegando pela usa aplicação;
// Constructor
public MainPage()
{
InitializeComponent();
novaInstancia = true;
}
- Sobrescreva o método OnNavigateFrom a fim de salvar o estado de sua página;
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
State["txtNome"] = txtNome.Text;
State["lblData"] = DateTime.Now;
State["EstadoSalvo"] = true;
novaInstancia = false;
}
- Sobrescreva o método OnNavigateTo a fim de restaurar o estado de sua página;
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (novaInstancia && State.ContainsKey("EstadoSalvo"))
{
txtNome.Text = State["txtNome"].ToString();
lblData.Text = State["lblData"].ToString();
}
}
Pronto, agora teste o aplicativo novamente, seguindo os passos citados anteriormente. Perceba que agora, ao retornarmos à aplicação a nossa página já exibe o nome preenchido e a data e hora em que saímos da página.

Conclusão
Como pudemos perceber, a implementação do nosso código é extremamente simples e a desativação e reativação de nossa aplicação torna-se imperceptível para o usuário, basta seguirmos as best practices de desenvolvimento. Nos próximos artigos irei abordar como podemos criar métodos de auxílio para facilitar o processo de gerenciamento do estado da página. Até a próxima...