MVVM – Model – View – ViewModel
Hoje comecei a desenvolver um novo jogo para o Windows 8 e o Windows Phone. Como quero abranger as duas plataformas e reaproveitar o máximo de código possível, vou usar o padrão MVVM junto com portable libraries para atingir este objetivo. Antes de começar, queria falar um pouco sobre o MVVM. MVVM vem de “Model-View-ViewModel” […]
Colocando focus automaticamente em controles no Winrt / Windows8
Que falta faz o FocusManager, né? Fui tentar colocar focus no primeiro campo de um formulário no WinRt e não achei o dito cujo. Para contornar a situação, vamos criar uma attached property que da conta do recado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public static class Focus { public static readonly DependencyProperty MappingsProperty = DependencyProperty.RegisterAttached("HasFocus", typeof(bool), typeof(Focus), null); public static bool GetHasFocus(DependencyObject dp) { return GetControl(dp).FocusState != FocusState.Unfocused; } public static void SetHasFocus(DependencyObject dp, bool value) { Control control = GetControl(dp); if(!value) return; control.Loaded += (sender, args) => control.Focus(FocusState.Programmatic); } private static Control GetControl(DependencyObject dp) { var control = dp as Control; if (control == null) { throw new ArgumentException("HasFocus can be only used in Controls"); } return control; } } |
Esta attached property simplesmente pega o controle associado a ela e baseado no booleano especificado, chama […]
Migrando seu App do Windows Phone para o Windows 8 RC – WebClient
Procurando o WebClient? Pois é, ele também não está presente no WinRT. No Windows Phone podemos fazer chamadas web assim:
1 2 3 4 5 6 7 8 9 10 |
public void MakeWebRequest() { WebClient client = new WebClient(); client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted); client.DownloadStringAsync(new Uri("http://www.bing.com")); } void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { string data = e.Result; // faça algo com os dados } |
No WinRT, temos que fazer uma chamada assíncrona usando os termos async e await, adicionados na última versão do .net. Fica assim:
1 2 3 4 5 |
public async Task<string> MakeWebRequestAsync() { HttpClient http = new System.Net.Http.HttpClient(); HttpResponseMessage response = await http.GetAsync("http://www.bing.com"); return await response.Content.ReadAsStringAsync(); } |
Bem menos código, né? Se você ainda não aprendeu sobre sync/await, […]
Migrando seu App do Windows Phone para o Windows 8 RC – StringFormat
No Caça-Palavras, eu faço bastante uso da propriedade StringFormat, presente no TextBlock. [xml] <TextBlock Text=”{Binding Words.Count, StringFormat=’Encontradas: {0}’}” /> [/xml] Infelizmente isso foi cortado no Windows 8. Para atingir o mesmo efeito de forma simples, criei um Converter que resolve o problema. Segue o código abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 |
public class StringFormatConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, string language) { if (parameter == null) { return value; } return String.Format((String)parameter, value); } public object ConvertBack(object value, Type targetType, object parameter, string language) { return value; } } |
E no seu Xaml: [xml] <TextBlock Text=”{Binding Words.Count, […]
Migrando seu App do Windows Phone para o Windows 8 RC – DependencyObjectCollection
Se você utiliza a classe DependencyObjectCollection para criar listas de DependencyObjects em seus controles no Windows Phone, vai sentir falta dela no Windows 8. Eu a utilizo no Wp7Tools para fazer uma attached property que mapeia eventos da View para actions no ViewModel, desacoplando os dois.
Migrando seu App do Windows Phone para o Windows 8 RC – WrapPanel
Esses dias comecei a portar meu jogo Caça-Palavras do Windows Phone para o novo Windows 8. Essa migração é uma excelente oportunidade para todos os desenvolvedores que já possuem aplicações no Windows Phone Marketplace atingirem um público infinitamente maior.