50
<Grid>
<Grid.Background>
<ImageBrush Stretch="UniformToFill"
ImageSource="/Assets/Images/Background.jpg"/>
</Grid.Background>
<PivotItem Header="Senha">
</PivotItem>
<PivotItem Header="Entrega">
</PivotItem>
</Pivot>
</Grid>
Neste ponto, vamos preencher o item “Senha” com os campos para que
o usuário digite sua senha atual, uma nova senha e uma confirmação para a
nova senha. Além disso, é claro, vamos fazer um botão para efetuar a troca
de senha, conforme a figura 5.5.
51
Agora vamos fazer com que o botão que inserimos nos comandos se-
cundários da Command nos leve até este formulário. Para isso precisamos
inserir um manipulador para o evento Click. Isso é feito tanto no arquivo
XAML quanto no arquivo C#. Veja os códigos a seguir:
<CommandBar.SecondaryCommands>
<AppBarButton Label="sua conta" Click="btnSuaConta_Click"/>
</CommandBar.SecondaryCommands>
52
53
Gerenciamento de dados em um
aplicativo Windows Phone
Apesar de já termos criado diversas páginas, nosso aplicativo ainda não pos-
sui nenhuma ligação com os dados. Como já foi mencionado, vamos criar
uma base de dados fictícia simulando o acesso a um serviço. Para fazer isso,
vamos resgatar os dados de um arquivo JSON que, junto com XML, são as
formas mais comuns de entregas de dados através de serviços. No caso de
aplicativos móveis, a utilização de JSON é mais recomendada devido a um
consumo menor de banda.
MVVM: Model-View-ViewModel
56
return dados;
57
}
set
{
dados = value;
}
}
58
Static
Async e Await
59
Com esse código, já possuímos uma string contendo todo o JSON de nos-
sos dados, entretanto ainda precisamos converter este texto para objetos C#.
É o que faremos utilizando a classe JsonConvert. Ela não é disponibilizada
no pacote inicial, então teremos de buscá-la em pacotes NuGet.
NuGet
60
61
62
<HubSection Header="classificações">
<DataTemplate>
<Grid>
<ScrollViewer>
<Grid Margin="10,0">
<ListView x:Name="Categorias">
<ListView.ItemTemplate>
<DataTemplate>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</ScrollViewer>
</Grid>
</DataTemplate>
</HubSection>
63
<HubSection Header="classificações">
<DataTemplate>
<Grid>
<ScrollViewer>
<Grid Margin="10,0">
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Descricao}"
Style=
"{ThemeResource ListViewItemTextBlockStyle}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</ScrollViewer>
</Grid>
</DataTemplate>
</HubSection>
64
65
Como você pode ver no código anterior, a lista de objetos vinculada à lista
de categorias é de um objeto anônimo, ou seja, um objeto resultante de uma
consulta que não possui uma classe definida. Entretanto, é interessante que
você utilize objetos tipados, e é importante lembrar-se de que os objetos de
modelo não devem possuir nenhuma ligação com a página. Neste momento,
entra o já apresentado view model.
Vamos criar uma pasta chamada ViewModels e adicionar nela a classe
ViewModelBase. Esta classe será utilizada como base para todos os view
models de nossa aplicação. Para que um objeto view model notifique a in-
terface quando o valor de suas propriedades for alterado, é necessário que a
classe implemente a interface INotifyPropertyChanged. Além disso, já
66
return false;
}
67
Agora vamos criar um template de dados mais complexo para o item pro-
moção. Aqui vamos listar todos os itens que possuem preço promocional,
com seu título, sua imagem e com o percentual de desconto.
Uma boa prática para desenvolver templates mais complexos é criá-los
fora da lista, como se fossem componentes fixos, até você ficar contente com
o design. Somente depois disso insira-o no template e altere o valor das pro-
priedades para as respectivas propriedades via Binding.
Primeiro vamos criar um Grid e dividi-lo em duas colunas: na esquerda
ficará a imagem do produto e na direita ficarão os dados que citamos anteri-
ormente. Na coluna da imagem, vamos inserir um Grid com a cor branca,
para dar um fundo ao ícone do produto. Observe o código:
<Grid Height="150">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid Background="White">
68
</Grid>
</StackPanel>
</Grid>
69
Como você pode ver, nossa propriedade possui apenas o método get,
já que não é possível inserir um valor nela. Agora você pode utilizar esta
70