logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Mai 20

Windows Phone 7–UI Thread e Composition Thread

Escrito por Alexandre Tadashi em 1, 2.0, 2009, 3.5, 4, 6, Animação, Animações, app, AR, Artigo, auto, back, Behavior, BI, bitmap, busca, C#, cache, class, CSharp, Curso, Cursos, demo, desempenho, dispatch, Diversos, Draw, DRE, event, exemplo, Experiência do Usuário, for, function, git, Gráfico, handle, html, ide, IE, if, image, imagens, int, interface, Introdução, library, map, maps, mg, Microsoft, monitor, Monitoramento, movimento, MSDN, O, on, Outros, RIA, Ria’s Geral, S+S, silverlight, Silverlight 3, SmartPhone, Software, Storyboard, Sun, super(), TAT, Tema, try, UI, Vídeo, Visual Studio, Visual Studio 2010, vs, window, windows, XP @ 05 20th, 2011 | via http://alexandretadashi.net/ | Sem comentários
Alexandre Tadashi
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

imageA renderização da interface gráfica do Windows Phone 7 foi projetada para buscar o máximo de performance que o smartphone pode proporcionar, a UI Thread é responsável pelo desenho da interface principal do aplicativo, quando criamos um software para o WP7, devemos evitar bloquear a UI Thread, pois ela está diretamente relacionada a performance do software e também com a experiência do usuário com o aplicativo.

Os smartphones com Windows Phone 7, tem disponível um recurso que utiliza a aceleração da GPU, aumentando consideravelmente o desempenho gráfico para algumas tarefas relacionadas a manipulação de imagens e animações, principalmente as que usam a rotação de eixos, escalas e alguns tipos de? animações que usam de Storyboard. Não é necessário acionar nada para que alguns tipos de Storyboards utilizem esse recurso, eles automaticamente usam o Composition Thread ou também chamado de Render Thread.

O Render Thread pode ser usado para animações simples utilizando DoubleAnimation ou Easing Functions, ou em propriedades? como Opacity, Render Transforms e Rectangular Clip. Habilitando o EnableRedrawRegions podemos ver quais regiões na aplicação estão sendo desenhadas no momento, visualizando? quadro a quadro:

Application.Current.Host.Settings.EnableRedrawRegions = true;

Composition Frame Rate Thread? e UI Frame Rate Thread

Quando executamos um aplicativo através do Visual Studio 2010 com o smartphone plugado no computador,? podemos visualizar alguns números no lado superior direito da tela, esses números servem para você ter como parâmetro alguns pontos sobre a renderização gráfica, memória, etc, os dois primeiros números de 3 dígitos são referente a Render Thread e a UI Thread.

Thread

O Composition Frame Rate Thread está associado a velocidade com que a tela é atualizada em uma thread separada da UI Thread, como referência, o Windows Phone 7 utiliza o valor 30 como ponto de equilíbrio, ou seja, quando for abaixo de 30, os números estarão na cor vermelha, acima de 30 ele ficará com a cor default, o valor mais próximo de uma boa performance é 60, sua aplicação deve buscar sempre se aproximar desse número.

O UI Frame Rate Thread mostra a taxa de atualização da Thread principal, enquanto a interface do usuário estiver ativa, o valor de 30 também foi definido como ponto de equilíbrio, ficando vermelho se a aplicação estiver abaixo deste valor, porém este valor deve ser acima de 20 para ter um tempo de resposta aceitável e quanto maior o valor , o tempo de resposta será mais rápido.

Exemplo prático de UI Thread VS Render Thread

Vou criar um aplicativo simples com dois elementos Ellipse na tela, um com o nome BolaVermelha e outro com BolaAzul, as duas Ellipses serão animadas na tela, a BolaAzul vai utilizar o Render Thread, pois vamos utilizar uma Storyboard com a propriedade RenderTransform, já a BolaVermelha vamos anima-lá atualizando a mesma propriedade, mas utilizando um timer DispatcherTimer para atualizar a propriedade, ou seja, não utilizaremos uma Storyboard para realizar a animação e ela estará utilizando a UI Thread.

   1:    public partial class MainPage : PhoneApplicationPage
   2:      
   3:  
   4:          DispatcherTimer timer;
   5:          RotateTransform rotateVermelho;
   6:          bool bateVolta;
   7:          int contador = 0;
   8:  ? 
   9:          public MainPage()
  10:          
  11:              InitializeComponent();
  12:              Loaded += new RoutedEventHandler(MainPage_Loaded);
  13:  ? 
  14:              Application.Current.Host.Settings.EnableRedrawRegions = true;
  15:  
  16:              this.BolaVermelha.RenderTransform =
  17:                  new RotateTransform();
  18:              this.BolaAzul.RenderTransform =
  19:               new RotateTransform();
  20:  
  21:              rotateVermelho =
  22:              BolaVermelha.RenderTransform as RotateTransform;
  23:              rotateVermelho.Angle = -50;
  24:  ? 
  25:              timer = new DispatcherTimer();
  26:              timer.Tick += new EventHandler(timer_Tick);
  27:              timer.Interval = new TimeSpan(0, 0, 0, 0, 33);
  28:              timer.Start();
  29:  ? 
  30:              bateVolta = false;
  31:  
  32:          
  33:  ? 
  34:          void MainPage_Loaded(object sender, RoutedEventArgs e)
  35:          
  36:  ? 
  37:              Storyboard storyboard = new Storyboard();
  38:              DoubleAnimation animation = new DoubleAnimation();
  39:              animation.From = 0;
  40:              animation.To = 180;
  41:              animation.Duration = new Duration(new TimeSpan(0, 0, 1));
  42:              animation.AutoReverse = true;
  43:              Storyboard.SetTarget(animation, this.BolaAzul.RenderTransform);
  44:              Storyboard.SetTargetProperty(animation, new PropertyPath("Angle"));
  45:              storyboard.Children.Add(animation);
  46:              storyboard.RepeatBehavior = RepeatBehavior.Forever;
  47:              storyboard.Begin();
  48:  
  49:          
  50:  ? 
  51:          void timer_Tick(object sender, EventArgs e)
  52:          
  53:              if (rotateVermelho .Angle == 120)
  54:              
  55:                  bateVolta = true;
  56:              
  57:              if (rotateVermelho.Angle == -50)
  58:              
  59:                  bateVolta = false;
  60:              
  61:  ? 
  62:              if (bateVolta == true)
  63:              
  64:                  rotateVermelho.Angle -= 1;
  65:              
  66:              else
  67:              
  68:                  rotateVermelho.Angle += 1;
  69:              
  70:  ? 
  71:              contador++;
  72:  ? 
  73:              if (contador == 600)
  74:              
  75:                  MessageBox.Show("Parando a UI Thread");
  76:                  Thread.Sleep(1000);
  77:              
  78:  ? 
  79:              if (contador == 1000)
  80:              
  81:                  MessageBox.Show("Inserindo BitmapCache");
  82:                  BitmapCache cache = new BitmapCache();
  83:                  BolaVermelha.CacheMode = cache;
  84:  ? 
  85:              
  86:  ? 
  87:          }
  88:  ? 
  89:      }

?

Na linha 71 criei um contador, quando chegar a 600, ele vai bloquear a UI Thread, na linha 76, a UI Thread é bloqueada propositalmente utilizando Thread.Sleep, neste momento você irá notar que a animação da? BolaVermelha irá parar com base no tempo definido em Sleep, pois a sua Thread está bloqueada, mas a BolaAzul continuará a se movimentar.

Quando o contador chegar a 1000,? vou adicionar um BitmapCache na propriedade CacheMode da BolaVermelha, em alguns casos onde não estamos utilizando a Render Thread, podemos criar um cache, ou seja, colocar os bitmaps na memória, e com isso aproveitar da aceleração da GPU, com performance semelhante a Composition Thread, porém a BolaVermelha continuará na UI Thread,? uma simples mensagem na tela utilizando um MessageBox irá bloquear a UI Thread enquanto a BolaAzul continuará em movimento.

Conclusão

UI Thread e Composition Thread são recursos fundamentais que o Windows Phone 7 utiliza para apresentar a interface gráfica, conhecendo essas Threads você poderá melhorar a perfomance da sua aplicação, os smartphones são equipamentos limitados se comparado a um PC, conhecer quando utilizar determinado recurso pode fazer muita diferença, existem diversos outros pontos a serem considerados quanto ao monitoramento da aplicação com objetivo de melhorar a perfomance, neste artigo somente apresentei uma introdução sobre o assunto.

Alguns recursos podem não funcionar como esperado no emulador, pois depende de diversos fatores como o suporte a DirectX pela placa de video, neste link você encontra mais informações:

WP7/Silverlight Graphics Performance

Mais informações sobre Bitmap Cache : Bitmap Cache

Mais informações sobre performance: Performance Considerations in Applications for Windows Phone

Jan 2

Os números de 2010

Escrito por Flavia Moreira em .NET, 1, 2009, 4, 6, AR, Artigo, Artigos, Asp.Net, back, Blend, blog, blog silverlight, blogsilverlight, busca, C#, CSharp, DataGrid, deep zoom, deepZoom, desempenho, Desktop, Destaque, DevMedia, Dica, estatísticas, exemplo, Expression Blend, facebook, for, Google, ide, IE, if, image, imagens, int, linq, Linq to Sql, mg, Microsoft, Microsoft Blend, MSDN, O, on, pt, Reconhecimento de voz, redeRIA, RIA, Ria’s Geral, saúde, silverlight, Silverlight 3, Silverlight 4, site, social, tag, TAT, template, Twitter, UAU, UI, Video Aula, Visual Studio 2010, VOZ, vs, Wordpress, WPF, Xna @ 01 2nd, 2011 | via http://flamoreira.wordpress.com | Sem comentários
Flavia Moreira
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Os duendes das estatísticas do WordPress.com analisaram o desempenho deste blog em 2010 e apresentam-lhe aqui um resumo de alto nível da saúde do seu blog:

Healthy blog!

O Blog-Health-o-Meter™ indica: Uau.

Números apetitosos

Imagem de destaque

Um Boeing 747-400 transporta 416 passageiros. Este blog foi visitado cerca de 12,000 vezes em 2010. Ou seja, cerca de 29 747s cheios.

?

Em 2010, escreveu 23 novo artigo, aumentando o arquivo total do seu blog para 80 artigos. Fez upload de 2 imagens, ocupando um total de 85kb.

O seu dia mais activo do ano foi 16 de agosto com 110 visitas. O artigo mais popular desse dia foi C#.

De onde vieram?

Os sites que mais tráfego lhe enviaram em 2010 foram social.msdn.microsoft.com, google.com.br, devmedia.com.br, rederia.net e pt-br.wordpress.com

Alguns visitantes vieram dos motores de busca, sobretudo por exemplo de aplicação desktop c# vs 2010, flavia moreira, sites super interessantes, video aula silverlight e reconhecimento de voz c#

Atracções em 2010

Estes são os artigos e páginas mais visitados em 2010.

1

C# novembro, 2008
3 comentários

2

Sobre mim agosto, 2008
54 comentários

3

Sites super interessantes agosto, 2008
3 comentários

4

Populando Datagrid usando LINQ TO SQL em Silverlight agosto, 2008
16 comentários

5

WPF E RECONHECIMENTO DE VOZ março, 2009
4 comentários

Ago 26

Videos sobre Silverlight no MSDN

Escrito por Flavia Moreira em 1, 4, 6, AR, blog, blog silverlight, blogsilverlight, C#, CSharp, Expression Blend, facebook, if, mg, Microsoft, Microsoft Silverlight, MSDN, O, on, pt, Ria’s Geral, silverlight, Silverlight 3, Silverlight 4, TAT, Twitter, UI, Vídeo, Vídeos, Wordpress @ 08 26th, 2010 | via http://flamoreira.wordpress.com | Sem comentários
Flavia Moreira
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá amigos!

Fui convidada a colocar os vídeos sobre Silverlight  no MSDN :

  • http://msdn.microsoft.com/pt-br/silverlight/ff952166.aspx
  • http://msdn.microsoft.com/pt-br/silverlight/ff951768.aspx
  • http://msdn.microsoft.com/pt-br/silverlight/ff951706.aspx

Abraços,

Flávia Moreira

Ago 20

Criando um editor de Texto – Parte II

Escrito por Flavia Moreira em 1, 4, 6, AR, arte, Asp.Net, Blend, blog, blog silverlight, blogsilverlight, C#, Componente, CSharp, Desenvolvimento, Expression Blend, facebook, fonte, html, ide, if, mg, Microsoft, Microsoft Blend, NaN, O, on, RIA, Ria’s Geral, silverlight, Silverlight 3, Silverlight 4, TAT, Twitter, Vídeo, Visual Studio, Visual Studio 2010, Wordpress @ 08 20th, 2010 | via http://flamoreira.wordpress.com | Sem comentários
Flavia Moreira
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Nesta vídeo aula você irá continuar com o desenvolvimento de um editor de Texto usando o componente RichTextBox do Silverlight.  

Esta vídeo aula requer é continuação da vídeo aula Criando um editor de Texto – Parte I

Conteúdo:
Adicionando Underline para o Editor

Adionando Cor para o  Editor

Adicionado Fonte Size para o  Editor
 

Criando um editor de Texto – Parte II

Abraços

Flávia Moreira

 

Ago 18

Criando um editor de Texto – Parte I

Escrito por Flavia Moreira em 1, 4, 6, AR, arte, Asp.Net, Blend, blog, blog silverlight, blogsilverlight, C#, Componente, CSharp, deepZoom, Expression Blend, facebook, html, ide, if, Javascript, mg, Microsoft, O, on, RIA, Ria’s Geral, silverlight, Silverlight 3, Silverlight 4, TAT, Twitter, Vídeo, Visual Studio 2010, Wordpress @ 08 18th, 2010 | via http://flamoreira.wordpress.com | Sem comentários
Flavia Moreira
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Nesta vídeo aula você irá aprender como trabalhar com o componente RichTextBox do Silverlight.  Para começar a desenvolver um editor de texto

em:

http://www.dowhile.com.br/videos/silverlight/175-criando-um-editor-de-texto-parte-i.html

Abraços,

Comentem!

Ago 11

Silverlight e GPU Acceleration

Escrito por Flavia Moreira em 1, 4, 6, Animação, AR, Artigo, Artigos, Asp.Net, BI, Blend, blog, blog silverlight, blogsilverlight, C#, CSharp, Curso, Cursos, Expression Blend, html, if, mg, Microsoft, O, on, Ria’s Geral, silverlight, Silverlight 3, Silverlight 4, TAT, Tutoriais, Twitter, Visual Studio, Wordpress @ 08 11th, 2010 | via http://flamoreira.wordpress.com | Sem comentários
Flavia Moreira
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Silverlight e GPU Acceleration

Você sabe quando usar?

A partir da versão Silverlight 3 é possível habilitar a aceleração de hardware. A ativação permite otimizar os recursos de hardware. Se você tiver um processador poderoso, multi-core, eu recomendo limitar o número de núcleos disponíveis para o seu navegador a 1, de modo que você veja diferença do recurso de hardware.   

 Leia mais

Ago 10

Impressão com Silverlight 4

Escrito por Flavia Moreira em 1, 4, 6, api, AR, arte, Artigo, Artigos, Asp.Net, Blend, blog, blog silverlight, blogsilverlight, C#, class, classe, control, CSharp, demo, err, erro, event, Evento, for, html, IE, if, impressão, int, mg, O, on, print, processo, RIA, Ria’s Geral, silverlight, Silverlight 3, Silverlight 4, TAT, UI, Visual Studio, window, windows, Wordpress @ 08 10th, 2010 | via http://flamoreira.wordpress.com | Sem comentários
Flavia Moreira
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Impressão com Silverlight 4

Neste artigo será demonstrado como acessar o dispositivo de impressão com Silverlight. A API do Silverlight permite imprimir: o que está na tela, o conteúdo selecionado e múltiplas impressões.

A classe PrintDocument, presente no namespace System.Windows.Printing fornece capacidades de impressão a partir de um aplicativo Silverlight.  Para abrir uma caixa de diálogo de impressão deverá usar o método Print .

Para especificar o conteúdo para impressão, é preciso utilizar o evento PrintPage.  Você pode imprimir o controle Silverlight todo, definindo a propriedade do PrintPageEventArgs
PageVisual para “root” do conteúdo Silverlight.  Alternativamente, você pode imprimir uma parte do controle Silverlight definindo  PrintPageEventArgs PageVisual  colocando somente o UIElement que você deseja imprimir

Após o evento PrintPage ocorrer, o será enviado para a impressora a ser impresso.  Se o conteúdo é grande demais para caber na PrintableArea,  ela será cortada.  Se o HasMorePages propriedade é verdadeira, o evento PrintPage ocorrerá várias vezes até o HasMorePages ser falsa.

Use o evento BeginPrint para realizar um tratamento especial e  o EndPrint para limpar ou para detectar erros que ocorreram durante o processo de impressão com a propriedade EndPrintEventArgs. Erro.

Leia mais

Ago 10

Impressão com Silverlight 4

Escrito por Flavia Moreira em 1, 4, 6, api, AR, arte, Artigo, Artigos, Asp.Net, Blend, blog, blog silverlight, blogsilverlight, C#, class, classe, control, CSharp, demo, err, erro, event, Evento, for, html, IE, if, impressão, int, mg, O, on, print, processo, RIA, Ria’s Geral, silverlight, Silverlight 3, Silverlight 4, TAT, UI, Visual Studio, window, windows, Wordpress @ 08 10th, 2010 | via http://flamoreira.wordpress.com | Sem comentários
Flavia Moreira
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Impressão com Silverlight 4

Neste artigo será demonstrado como acessar o dispositivo de impressão com Silverlight. A API do Silverlight permite imprimir: o que está na tela, o conteúdo selecionado e múltiplas impressões.

A classe PrintDocument, presente no namespace System.Windows.Printing fornece capacidades de impressão a partir de um aplicativo Silverlight.  Para abrir uma caixa de diálogo de impressão deverá usar o método Print .

Para especificar o conteúdo para impressão, é preciso utilizar o evento PrintPage.  Você pode imprimir o controle Silverlight todo, definindo a propriedade do PrintPageEventArgs
PageVisual para “root” do conteúdo Silverlight.  Alternativamente, você pode imprimir uma parte do controle Silverlight definindo  PrintPageEventArgs PageVisual  colocando somente o UIElement que você deseja imprimir

Após o evento PrintPage ocorrer, o será enviado para a impressora a ser impresso.  Se o conteúdo é grande demais para caber na PrintableArea,  ela será cortada.  Se o HasMorePages propriedade é verdadeira, o evento PrintPage ocorrerá várias vezes até o HasMorePages ser falsa.

Use o evento BeginPrint para realizar um tratamento especial e  o EndPrint para limpar ou para detectar erros que ocorreram durante o processo de impressão com a propriedade EndPrintEventArgs. Erro.

Leia mais

Ago 3

Escrevendo em arquivo Texto com Silverlight

Escrito por Flavia Moreira em .NET, 1, 3d, 4, 6, AR, Artigo, Artigos, Asp.Net, blog, blog silverlight, blogsilverlight, C#, class, classe, classes, CSharp, Curso, dados, explicação, for, Google, handle, html, ide, IE, if, int, internet, Introdução, library, mg, Microsoft, MSDN, O, on, pt, RIA, Ria’s Geral, servidor, silverlight, Silverlight 3, Silverlight 4, TAT, template, Tutorial, UI, Visual Studio, Visual Studio 2010, vs, web, WebClient, Wordpress, XP @ 08 3rd, 2010 | via http://flamoreira.wordpress.com | Sem comentários
Flavia Moreira
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

 

Introdução
Neste tutorial será mostrado como gravar um arquivo com extensão em *.txt  dentro do servidor usando o Silverlight usando a linguagem C# e o Visual Studio 2010. Como ponto de partida, é necessário conhecer as classes WebClient e StreamWriter, e o template Generic Handler.

A classe WebClient  fornece métodos comuns para enviar dados ou receber dados a partir de qualquer local, intranet ou Internet recurso identificado por um URI. Nesta explicação será utilizado o método OpenWriteAsync.

leia mais…

abraços

Flávia

Jul 3

DataValidation – Silverlight 4

Escrito por Robson Fernandes em 1, 4, 6, app, AR, back, BI, blog, C#, camp, carregar, case, class, classe, cliente, código, control, Controles, CSharp, Curso, Cursos, dados, demo, Design, Dica, Dicas, Download, err, erro, error, exemplo, fonte, for, Google, ide, IE, if, image, int, interface, Java, Javascript, layout, library, mg, Microsoft, MSDN, NaN, News, O, on, override, padrão, Pessoal, pt, Review, RIA, Ria’s Geral, RoR, Scroll, silverlight, Silverlight - Core, SilverLight - Design, Silverlight - Dicas, SilverLight - News, Silverlight - XAML, Silverlight 3, Silverlight 4, Software, string, TAT, UI, validação, vs, wow, XAML, XML @ 07 3rd, 2010 | via http://www.riasoftware.com.br/blog/ | 3 comentários
Robson Fernandes
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »



INTRODUÇÃO

Boa noite galera!
Veremos neste post, como se trabalhar com validações de campos no Silverlight 4. Há várias maneiras de se validar um campo no Silverlight, seja por DataAnnotations , ou através da interface IDataErrorInfo, que nos fornece métodos para validar dados de forma personalizada.

PREVIEW

Abaixo, temos o exemplo que será demonstrado. Os campos validados serão, campo “Nome” e “Idade”, sendo que a regra aplicada, teremos:

Nome ::    Será um campo obrigatório.
Idade ::    Aceitará somente valores maiores que zero.

DataValidation - Silverlight 4


Observe na imagem abaixo, o momento de validação de um dos campos, e o feedback ao usuário pelo erro encontrado.

robson_fernandes_riasoftware_datavalidation_silverlight_02

CÓDIGO C#

Abaixo, temos o código em C# que irá constituir a classe Cliente, sendo que ela terá duas propriedades, “Nome” e “Idade”. A classe Cliente implementa a interface IDataErrorInfo, que nos fornece métodos para validação de dados.
Abaixo temos um método que valida as propriedades da Classe, nele passamos como parâmetro qual a propriedade que desejamos validar, e posteriormente criamos nossas regras de negócio referente a mesma, retornando uma “string” do erro personalizado que adotarmos.

    public class Cliente : IDataErrorInfo
    {
		//Propriedades da Classe
        public string Nome        { get; set; }
        public int Idade          { get; set; }

		//Método implementado através da
		//interface IDataErrorInfo
		//Retorna uma mensagem de erro indicando o que
		//está errado com esse objeto.
        public string Error
        {
            get { return null; }
        }
		//Método implementado através da
		//interface IDataErrorInfo
		//Através dele, passamos o nome da propriedade
		//que desejamos validar
        public string this[string columnName]
        {
            get
			{
                switch (columnName)
                {
					 //Validando a Propriedade Nome
					 //e retornando a mensagem de erro
                     case "Nome":

							if ((Nome.Length == 0) || Nome.Trim() == "")
                                   return "O campo Nome é obrigatório.";
                            else
                                   goto default;

					//Validando a Propriedade Idade
					//e retornando a mensagem de erro
                    case "Idade":
                            if (Idade < 0)
                                    return "O campo Idade deve ser maior que 0.";
                            else
                                    goto default;

					//Por padrão, retorna null
                    default:

                                     return null;

                }
             }
        }
    }

CÓDIGO XAML

No código XAML abaixo, temos os dois elementos TextBox que serão validados, observe que o primeiro elemento, o “textBoxNome”, está com a propriedade “Text” vinculada através de Binding, com a Propriedade “Nome”, da classe Cliente; E a propriedade “Text” do elemento “textBoxIdade”, vinculado através de Binding, com a Propriedade “Idade”.
Ambos os elementos estão com as meta-propriedades do Binding, “ValidatesOnDataErrors” e “ValidatesOnExceptions”, setados para “True”, pois é através dessa ativação, que os controles estarão aptos a utilizar os recursos de validação do Silverlight.

		 <!-- Elemento TextBox, vinculado
		  por Binding, a propriedade Nome -->
		<TextBox x:Name="textBoxNome"
				Margin="80,40,16,0"
				Height="25"
				VerticalAlignment="Top"
				Text="{Binding Nome,
					   Mode=TwoWay,
					   ValidatesOnDataErrors=True,
					   ValidatesOnExceptions=True}"
				d:LayoutOverrides="GridBox" />

		  <!-- Elemento TextBox, vinculado
		  por Binding, a propriedade Idade -->
		<TextBox x:Name="textBoxIdade"
				Margin="80,90,190,34"
				Height="25"
				Text="{Binding Idade,
					   Mode=TwoWay,
					   ValidatesOnDataErrors=True,
					   ValidatesOnExceptions=True}"
			   d:LayoutOverrides="GridBox" />

CÓDIGO C#

No código C# abaixo, vamos carregar o DataContext da nossa MainPage, através de alguns dados de exemplo, utilizando a classe “Cliente” implementada, para que os elementos TextBox possam ter suas propriedades “Text”, carregadas e possam utilizar os recursos de validação personalizada que implementamos.

	public partial class MainPage : UserControl
	{
		public MainPage()
		{

			InitializeComponent();
			//Adiciono objeto ao DataContext, para
			//carregar elementos que estão na View,
			//por Binding
            DataContext = new Cliente() {	Nome="Robson Fernandes",
				                            Idade = 21
				                        };
		}
	}


APLICAÇÃO – RUN

Abaixo temos a aplicação final executando.

DOWNLOAD

Fontes Silverlight Completo-> DataValidationApp

Abraços pessoal!

Robson Fernandes


« Entradas anteriores |

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2755 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com