Arquivo

Arquivo do autor

Prova beta 70-599 Pro: Designing and Developing Windows Phone 7 Applications

29, março, 2011 Sem comentários

Preparem os estudos! A prova beta para o exame 70-599 MCPD em desenvolvimento Windows Phone 7 será anunciada dentro de alguns dias. Desenvolvedores que atualizaram o perfil no SME, já começaram a receber os convites. Só para adiantar um pouco o registro para as provas começaram hoje (29/03) e serão aplicadas entre os dias 19 de abril e 4 de maio. A prova está diponível na Prometric pelo título de ”Exam 71-599, Pro: Designing and Developing Windows Phone 7 Applications” Material de estudo: Livros

Training Kits

O conteúdo da prova ainda não foi divulgado, entrei em contato com a microsoft e obtive a resposta que em até 2 semanas a página estará disponível pelo endereço http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-599&locale=en-us

[UPDATE] Página com conteúdo do exame já está disponível

Categories: Certificação Tags: , ,

MVVM no Windows Phone 7 – Parte 1 (Commands)

O padrão MVVM (Model-View-ViewModel) é uma especialização do padrão Presenter porém utilizando capacidades específicas de Silverlight e WPF como data binding, command e behaviors. O MVVM é semelhante a muitos outros padrões que separam a camada de apresentação da camada de lógica, sendo assim toda a lógica de negócio pode ser programada para qualquer tipo de interface XAML. Utilizando MVVM o código da sua view irá ficar totalmente limpo e muito mais fácil de dar manutenção. Sem utilizar MVVM o simples clique de um botão é definido da seguinte forma:

<Button Click="Button_Click" />
private void Button_Click(object sender, RoutedEventArgs e)
        {

        }

Mas qual o problema desta abordagem? Bom dou um bom exemplo: Você está desenvolvendo um sitema que tem um cliente Desktop WPF e um cliente móvel em WP7. Se os códigos estiverem todos nas views, terá que recodificar tudo em cada cliente. Com a utilização dos viewModels, você irá codificar esta ação uma única vez tanto para WPF quando para WP7. Deixando a teoria de lado, vamos por a mão na massa. Leia mais…

Categories: Windows Phone 7 Tags: ,

Utilizando ChildWindows de forma síncrona

Um problema que me deparo constantemente é a necessidade de abrir um ChildWindow qualquer e continuar a execução do código a partir do retorno deste. Claro que é possível fazer isto utilizando Actions e eventos, mas não seria muito melhor que trabalhasse de forma semelhante ao MessageBox do WinForms?

Antes de começar é necessário instalar o Visual Studio Async CTP pois ele nos da a possibilidade de trabalhar de forma Assíncrona/Síncrona.

Primeiro criaremos um novo projeto com o template Silverlight Application. Dentro do projeto crie um novo item utilizando o template ChildWindow, e de-lhe o nome de ChildWindowSync.

Criaremos então um método estático que será responsável por mostrar a nossa window conforme o código abaixo:

        public static Task<bool> ShowSync()
        {
            var tcs = new TaskCompletionSource<bool>();
            var window = new ChildWindowSync();
            window.Closed += (sender, e) => {
                tcs.TrySetResult(window.DialogResult.Value);
            };
            window.Show();
            return tcs.Task;
        }

Veja que é bastante simples, criamos um objeto TaskCompletionSource que será a task retornada quando nossa window for fechada, após este passo a janela é criada e adicionamos um eventHandler ao evento de closed. Dentro deste handler setamos o dialogResult que foi definido pelos métodos de button click do Ok e Cancel;

Neste momento seu código deve estar parecido com o abaixo:

    public partial class ChildWindowSync : ChildWindow
    {
        public ChildWindowSync()
        {
            InitializeComponent();
        }

        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
        }

        public static Task<bool> ShowSync()
        {
            var tcs = new TaskCompletionSource<bool>();
            var window = new ChildWindowSync();
            window.Closed += (sender, e) => {
                tcs.TrySetResult(window.DialogResult.Value);
            };
            window.Show();
            return tcs.Task;
        }
    }

Agora criaremos um botão na MainPage.xaml que irá chamar nossa ChildWindowSync.

<UserControl x:Class="SilverlightApplication2.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <Button x:Name="testebtn" Content="Open window" Click="testebtn_Click"
                VerticalAlignment="Center" HorizontalAlignment="Center"/>
    </Grid>
</UserControl>

O async ctp exige que seja utilizado a palavra reservada “async” nos métodos que utilizam chamadas assíncronas em seu corpo. No caso a assinatura do método testbtn_Click fica da seguinte forma:

private async void testebtn_Click(object sender, RoutedEventArgs e)

então colocamos o corpo do nosso método para esperar ate que a childWindow seja fechada e retornar se o DialogResult foi True ou False

private async void testebtn_Click(object sender, RoutedEventArgs e)
        {
            bool teste = await ChildWindowSync.ShowSync();
            if (teste)
            {
                MessageBox.Show("Você Clicou em Ok!");
            }
            else
            {
                MessageBox.Show("Você clicou em Cancel!");
            }
        }

Rode a aplicação e veja o resultado. Você verá que ao clicar no nosso botão de teste a child window é exibida e o resultado é exibido somente depois da janela ter um resultado: true se for clicado em Ok e False se for clicado em Cancel ou fechar a janela pelo X.

O código fonte deste exemplo pode ser baixado aqui.

Categories: Silverlight Tags: ,

MCTS: 70-506 Silverlight 4 Development–Aprovado

28, janeiro, 2011 6 comentários

2011 começa com boas notícias! Após muito tempo sem postar nada, venho compartilhar minha alegria ao ser aprovado com a pontuação de 900/1000 na minha primeira certificação microsoft.

A prova achei um pouco mais difícil que a prova beta, mas nada muito complicado, qualquer pessoa que utilize silverlight no dia a dia consegue ser aprovado.

Sobre as questões vi muita coisa sobre layout e perguntas específicas de controles básicos como TextBox, ComboBox e Grid, eventos e eventos roteados, muito pouco sobre Binding e Command além de 2 questões sobre ClientAccessPolice e mais umas duas sobre WCF.

No geral a prova ficou bem dividida e abordando todos os assuntos divulgados no site do exame.

Quem estiver interessado em estudar para esta prova, é uma leitura quase que obrigatória o livro “Pro Silverlight 4” da Apress.

Próxima prova… 70-516!

Entity Framework 4 – POCO Code Only

9, setembro, 2010 2 comentários

Na versão “beta” deste blog, fiz um post mostrando como utilizar o POCO (Plain Old CLR Object) e as novas funcionalidades disponíveis no Feature CTP 4 para ADO.Net Entity Framework. Porém resolvi reescrever o post para explicar melhor cada funcionalidade e ir aprofundando a cada post.

Antes de começar faça o download do CTP 4.

  • Abra o Visual Studio 2010
  • File –> New –> New Project
  • Selecione “Windows” no menu à esquerda e depois “Console Application”
  • Digite PocoEF4 como nome do projeto

Com a nossa solução criada, criaremos mais dois projetos para o domínio e a persistência.

  1. Com o botão direito do mouse clique em Add –> New Project
  2. Selecione “Class Library”
  3. Digite Dominio no nome do projeto.
  4. Repita os passos 1 e 2 e coloque o nome do projeto como Persistencia

Após adicionar os projetos sua solução deve parecer como na imagem abaixo:

ScreenShot001

Vamos então criar o nosso domínio com as classes POCO. No projeto domínio crie duas classes com os nomes Blog e Post conforme o código abaixo

public class Blog
{
    public virtual Guid ID { get; set; }
    public virtual string BlogName { get; set; }
    private IList<post> _Posts = new List<post>(); 

    public virtual IList<post> Posts
    {
        get { return _Posts; }
        set { _Posts = value; }
    }
}
public class Post
{
    public virtual Guid ID { get; set; }
    public virtual Blog Blog { get; set; }
    public virtual string PostTitle { get; set; }
}

Para começar a utilizar o CTP 4 adicione a referência ao assembly Microsoft.Data.Entity.Ctp na tab .Net e adicione também o assembly System.Data.Entity.

Criado o domínio, temos que criar agora o contexto de dados. Crie uma classe no projeto Persistencia com o nome BlogContext conforme o código abaixo

using System.Data.Entity;

public class BlogContext : DbContext
{
    public BlogContext() : base(ConfigurationManager.ConnectionStrings["BlogConnection"].ConnectionString)
    {
    }
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post>
 Posts { get; set; }
}

Por último configure a conexão com o banco de dados, segue um exemplo abaixo

<configuration>
  <connectionStrings>
    <add name="BlogConnection" connectionString ="Data Source=.\;Initial Catalog=Blog;Integrated Security=SSPI;" providerName ="System.Data.SqlClient.SqlConnection"/>
  </connectionStrings>
</configuration>

Acessando os dados

class Program
{
    static void Main(string[] args)
    {
        using (var context = new BlogContext())
        {
            var blog = new Blog { ID = Guid.NewGuid(), BlogName = "AndrePassos.net" };
            context.Blogs.Add(blog);
            int rows = context.SaveChanges();

            Console.WriteLine("{0} entidades atualizadas no banco de dados", rows);
            Console.ReadKey();
        }
    }
}

Agora já podemos rodar o programa e verificar que um novo blog foi adicionado.

No próximo post irei explicar mais detalhadamente sobre o DbContext e o ModelDiscovery. Até a próxima

Categories: Entity Framework Tags: ,

ScrumTable (TFS, Scrum e Surface)

3, setembro, 2010 1 comentário

Esta semana visitando alguns blogs na internet me deparei com este incrível video mostrando a força do SCRUM na plataforma Microsoft. Recentemente foi lançado o Visual Studio Scrum 1.0, é um template para ser usado no Team Foundation Server 2010 que aplica todas as diretrizes do SCRUM na visão do seu projeto.

No final de junho 3 estudantes (Patrick Boos, Michael Gfeller e Silvan Gehrig) apresentaram seu projeto de bacharelado esta incível ferramenta utilizando o TFS, Scrum e Microsoft Surface. Foram utilizadas as tecnologias:

  • C# e WPF
  • Microsoft Surface SDK 1.0
  • Team Foundation Server 2010
  • Scrum

Veja o vídeo abaixo:

Categories: Scrum Tags: , , ,