<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-34573201</atom:id><lastBuildDate>Tue, 24 Jan 2012 05:36:23 +0000</lastBuildDate><category>Windows XP</category><category>ComentariosBizarros</category><category>Certificação</category><category>Team Foundation Server</category><category>MVC</category><category>Bizarro</category><category>Agenda</category><category>Download</category><category>Tefé</category><category>Dicas</category><category>Software Livre</category><category>Velocity</category><category>Lost</category><category>Cidadania</category><category>Virtual Earth</category><category>Windows Form</category><category>Viagens</category><category>Governo</category><category>Windows Server 2008</category><category>Vb.NET</category><category>SQLServer</category><category>Livros</category><category>Windows</category><category>dublin</category><category>Ajax</category><category>ASP.NET</category><category>Windows Phone</category><category>Manaus</category><category>Catastrofes</category><category>WF</category><category>JQuery</category><category>Natureza</category><category>Violência</category><category>Live</category><category>Noticias</category><category>TvSeries</category><category>mix</category><category>internet</category><category>Desgoverno</category><category>Servidores</category><category>Tecnologia</category><category>Eventos</category><category>EcoTurismo</category><category>Humor</category><category>Windows Azure</category><category>Paranoia</category><category>MeioBit</category><category>popFly</category><category>Direitos Autorais</category><category>DataServices</category><category>Windows 7</category><category>Amazonas</category><category>Windows Vista</category><category>Conhecimento Coletivo</category><category>Retrospectiva</category><category>CSS</category><category>Blogosfera</category><category>Javascript</category><category>Rails</category><category>How to</category><category>ASP</category><category>Segurança</category><category>Comportamento</category><category>xna</category><category>Turismo</category><category>Jornalismo</category><category>Educação</category><category>IIS</category><category>Retorno de Manaus</category><category>Jogos</category><category>ADO.NET</category><category>C#</category><category>Dia de Limpeza</category><category>Injustiça</category><category>Mundo</category><category>Internet Explorer 8</category><category>Oslo</category><category>WCF</category><category>PDC</category><category>Linq</category><category>Capitalismo</category><category>Musica</category><category>Crise</category><category>Dynamic Data</category><category>Hardware</category><category>Internet Explorer</category><category>betas</category><category>Comparacoes</category><category>WPF</category><category>cinemateca</category><category>Entity Framework</category><category>.NET</category><category>Silverlight</category><title>Cidadão Carioca</title><description>As aventuras, humor, observações e revolta de um cidadão carioca viajando pelo país levando oportunidades, educação e tecnologia para todos</description><link>http://cidadaocarioca.blogspot.com/</link><managingEditor>noreply@blogger.com (Dennes)</managingEditor><generator>Blogger</generator><openSearch:totalResults>794</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/CidadaoCarioca" /><feedburner:info uri="cidadaocarioca" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>CidadaoCarioca</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-4491208751910511702</guid><pubDate>Tue, 24 Jan 2012 05:26:00 +0000</pubDate><atom:updated>2012-01-24T03:26:46.523-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MVC</category><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><title>MVC : Globalizando o Range Validator</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Continuando a série sobre a &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=8868075556064722739"&gt;globalização da validação no ASP.NET MVC&lt;/a&gt;, vamos ver como globalizar o Range Validator.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Range Validator&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-ov6bc18wqI0/Tx5BETgeE2I/AAAAAAAAGU4/hDGiMxdzg0I/s1600-h/jquery3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="jquery" border="0" alt="jquery" align="right" src="http://lh4.ggpht.com/-7J0u2tgUX2I/Tx5BFerseDI/AAAAAAAAGVA/2p-1afiIZbA/jquery_thumb1.png?imgmax=800" width="128" height="128" /&gt;&lt;/a&gt;Assim como o validador numérico, pelo fato de lidar com números o Range Validator do jQuery precisa ter sua função alterada para poder interpretar corretamente as diferenças entre uso de “.” e “,” nos valores numéricos conforme a cultura utilizada. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Alterando a função&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Veja a nova função para a globalização do Range Validator :&lt;/p&gt;    &lt;pre class="csharpcode"&gt;&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;
    $(&lt;span class="kwrd"&gt;function&lt;/span&gt; () {
            jQuery.extend(jQuery.validator.methods,
            {
            range: &lt;span class="kwrd"&gt;function&lt;/span&gt; (value, element, param) {
          &lt;span class="rem"&gt;//Use the Globalization plugin to parse the value        &lt;/span&gt;
                &lt;span class="kwrd"&gt;var&lt;/span&gt; val = Globalize.parseFloat(value);
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.optional(element) || &lt;br /&gt;                           (val &amp;gt;= param[0] &amp;amp;&amp;amp; val &amp;lt;= param[1]);
            }
          });
    });
&amp;lt;/script&amp;gt;&lt;/pre&gt;
  &lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;p&gt;Repare no uso do jQuery.extend em comparação com a síntaxe usada no método number. As duas síntaxes são, de fato, equivalentes. Essa mesma função acima poderia ser escrita na outra síntaxe :&lt;/p&gt;

  &lt;pre class="csharpcode"&gt;&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;
    $(&lt;span class="kwrd"&gt;function&lt;/span&gt; () {
            $.validator.methods.range=&lt;br /&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; (value, element, param) {
          &lt;span class="rem"&gt;//Use the Globalization plugin to parse the value        &lt;/span&gt;
                &lt;span class="kwrd"&gt;var&lt;/span&gt; val = Globalize.parseFloat(value);
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.optional(element) || 
                              (val &amp;gt;= param[0] &amp;amp;&amp;amp; val &amp;lt;= param[1]);
            }
       });   
&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-4491208751910511702?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/e-NnYQORZYw/mvc-globalizando-o-range-validator.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-7J0u2tgUX2I/Tx5BFerseDI/AAAAAAAAGVA/2p-1afiIZbA/s72-c/jquery_thumb1.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2012/01/mvc-globalizando-o-range-validator.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-3101525058051482762</guid><pubDate>Mon, 23 Jan 2012 04:18:00 +0000</pubDate><atom:updated>2012-01-23T02:18:41.695-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MVC</category><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><title>MVC : Traduzindo a Mensagem de Validação Numérica</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Continuando a série sobre &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=8868075556064722739"&gt;globalização da validação&lt;/a&gt;, agora que já falamos sobre globalizar a validação numérica, vamos falar sobre a tradução da mensagem de validação.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Mensagem de Validação&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-tFIP0pD10W8/TxzfnE20LCI/AAAAAAAAGUo/uNEyXXlL3MA/s1600-h/jquery3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="jquery" border="0" alt="jquery" align="right" src="http://lh6.ggpht.com/-VySRKRxI7mo/TxzfoFm5D2I/AAAAAAAAGUw/bG0UIDt8ubw/jquery_thumb1.png?imgmax=800" width="128" height="128" /&gt;&lt;/a&gt;Todos os validadores permitem a personalização – e consequentemente a globalização – da mensagem de validação, com exceção de um : o validador de valores numéricos.&lt;/p&gt;    &lt;p&gt;Este validador é inserido automaticamente para verificar o tipo de dados numéricos e ficamos sem o controle de sua mensagem.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Alterando a Mensagem&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;A mensagem de erro deste validador é inserida dentro da página, em cada tag input, em um atributo chamado data-val-number.&lt;/p&gt;    &lt;p&gt;Desta forma podemos usar um pouco de “força-bruta” para trocar a mensagem : Com jQuery e expressão regular podemos fazer a troca.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Trocando a Mensagem&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;A função de troca deverá ser executada assim que a página for carregada, portanto, no $(document).ready&lt;/p&gt;    &lt;pre class="csharpcode"&gt;&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;
    $(&lt;span class="kwrd"&gt;function&lt;/span&gt; () {
        $(&lt;span class="str"&gt;&amp;quot;input[data-val-number]&amp;quot;&lt;/span&gt;).each(
    &lt;span class="kwrd"&gt;function&lt;/span&gt; (index, el) {
        &lt;span class="kwrd"&gt;var&lt;/span&gt; re = &lt;span class="kwrd"&gt;new&lt;/span&gt; RegExp(&lt;span class="str"&gt;&amp;quot;The field (.*?) must be a number.&amp;quot;&lt;/span&gt;);
        &lt;span class="kwrd"&gt;var&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; = $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).attr(&lt;span class="str"&gt;&amp;quot;data-val-number&amp;quot;&lt;/span&gt;);
        &lt;span class="kwrd"&gt;var&lt;/span&gt; m = &lt;span class="kwrd"&gt;string&lt;/span&gt;.match(re);
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (m != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; m.length &amp;gt; 1) {
            $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).attr(&lt;span class="str"&gt;&amp;quot;data-val-number&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;.replace(m[0], &lt;span class="str"&gt;&amp;quot;O campo &amp;quot;&lt;/span&gt; + m[1] + &lt;span class="str"&gt;&amp;quot; precisa ser numérico&amp;quot;&lt;/span&gt;));
        }
       });&lt;br /&gt;    });
&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;pre class="csharpcode"&gt;&lt;font face="Tahoma"&gt;&lt;strong&gt;O que a função faz&lt;/strong&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;font face="Tahoma"&gt;Usando jQuery localizamos todos os input que possuem o atributo data-val-number. Utilizando expressão regular trocamos a mensagem para uma equivalente em português, mantendo o nome do campo.&lt;/font&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;pre class="csharpcode"&gt;&lt;font face="Tahoma"&gt;&lt;strong&gt;Onde Inserir a Função&lt;/strong&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;font face="Tahoma"&gt;Quando a página é carregada o script de validação (jquery.validate.unobtrusive.js) analisa os atributos das tags input e gera os objetos de validação. &lt;/font&gt;&lt;/pre&gt;

  &lt;pre class="csharpcode"&gt;&lt;font face="Tahoma"&gt;Se a função acima for executada depois deste processo, não terá efeito algum, pois os objetos de validação já terão sido criados com a mensagem errada.&lt;/font&gt;&lt;/pre&gt;

  &lt;pre class="csharpcode"&gt;&lt;font face="Tahoma"&gt;Portanto a função acima deve ser inserida antes da inserção do script jquery.validate.unobtrusive.js&lt;/font&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-3101525058051482762?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/uyTWCniM3FI/mvc-traduzindo-mensagem-de-validacao.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-VySRKRxI7mo/TxzfoFm5D2I/AAAAAAAAGUw/bG0UIDt8ubw/s72-c/jquery_thumb1.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2012/01/mvc-traduzindo-mensagem-de-validacao.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-8834310431648781650</guid><pubDate>Sun, 15 Jan 2012 22:24:00 +0000</pubDate><atom:updated>2012-01-15T20:24:34.468-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MVC</category><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><title>MVC : Globalizando a Validação numérica</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Falamos anteriormente sobre a &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=8868075556064722739"&gt;globalização da validação no MVC&lt;/a&gt;. A globalização da validação numérica é um dos passos para essa globalização.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Validação Numérica&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-VHVl1rt9Nig/TxNSHTJEKRI/AAAAAAAAGUU/gAtfAX2NTuI/s1600-h/jquery3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="jquery" border="0" alt="jquery" align="right" src="http://lh6.ggpht.com/-F6DhVVsUCGk/TxNSIUdBjMI/AAAAAAAAGUc/wyJae6LA9dQ/jquery_thumb1.png?imgmax=800" width="128" height="128" /&gt;&lt;/a&gt;Quando criamos uma caixa de texto com base em um campo numérico o jQuery validator gera automaticamente uma validação do tipo de dados – como numérico – o que podemos ver pelo atributo data-val-number criado na tag input.&lt;/p&gt;    &lt;p&gt;O formato de um valor numérico depende muito da globalização : Alguns paises usam “.” como casa decimal, outros usam “,” como casa decimal, o que é nosso caso. Especialmente por isso a globalização se torna fundamental para nós.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Globalizando&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Para a validação numérica funcionar de forma globalizada precisamos alterar o método de validação de forma que ao invés da lógica padrão ele faça uma consulta ao plug-in de validação.&lt;/p&gt;    &lt;p&gt;Os métodos de validação padrões ficam localizados na classe jQuery.validator.methods . A síntaxe do javascript facilita a substituição do método padrão – que se chama number – por um novo método que utilize o plug-in de globalização.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Novo método&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Devemos inserir o novo método no inicio da página, após os scripts de globalização e do jQuery validator.&lt;/p&gt;    &lt;pre class="csharpcode"&gt;&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;
    $.validator.methods.number = &lt;span class="kwrd"&gt;function&lt;/span&gt; (value, element) { 
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (Globalize.parseFloat(value)) {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
        }
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
    }
&amp;lt;/script&amp;gt; &lt;/pre&gt;
  &lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;p&gt;A nova function faz uso do Globalize para identificar (ou não) o valor numérico. Atribuimos a nova function como propriedade number da classe methods e ela passa a substituir a validação numérica, resolvendo o primeiro problema da globalização&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-8834310431648781650?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/vBPKWdii2bk/mvc-globalizando-validacao-numerica.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-F6DhVVsUCGk/TxNSIUdBjMI/AAAAAAAAGUc/wyJae6LA9dQ/s72-c/jquery_thumb1.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2012/01/mvc-globalizando-validacao-numerica.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-8868075556064722739</guid><pubDate>Tue, 10 Jan 2012 03:24:00 +0000</pubDate><atom:updated>2012-01-24T03:36:23.584-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MVC</category><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><title>Globalização no ASP.NET MVC</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-fxO9jdNpCeM/TwuvVq5MOzI/AAAAAAAAGT0/cGL_0g6aOYk/s1600-h/asp-net-mvc-3%25255B5%25255D.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="asp-net-mvc-3" border="0" alt="asp-net-mvc-3" align="right" src="http://lh3.ggpht.com/-9G4eQCgwPDQ/TwuvYKxDV2I/AAAAAAAAGT8/kqHkcgGnMuI/asp-net-mvc-3_thumb%25255B1%25255D.gif?imgmax=800" width="244" height="107" /&gt;&lt;/a&gt;Os validadores do ASP.NET MVC – baseados no uso de JQuery – validam datas e números, além de fornecerem algumas mensagens de validação pré-definidas. Porém para isso fazem grande uso do jQuery validator.&lt;/p&gt;  &lt;p&gt;O uso do jQuery validator para a validação no MVC cria uma maior necessidade do controle de globalização, que precisará ser controlada também no lado client.&lt;/p&gt;  &lt;p&gt;Veja os desafios que precisamos resolver em relação a globalização no jQuery validator :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Definir a cultura a ser usada no client &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=8834310431648781650"&gt;Fazer com que a validação numérica use a globalização&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=3101525058051482762"&gt;Traduzir a mensagem das validações numéricas&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=4491208751910511702"&gt;Fazer com que o Range validator use a globalização&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;jQuery validator x Globalize&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-wLRxiq2bK7I/TwuvZc1sSxI/AAAAAAAAGUE/TFOqqZGNr9g/s1600-h/jquery%25255B10%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="jquery" border="0" alt="jquery" align="left" src="http://lh5.ggpht.com/-s3Y38dX_NcI/Twuva_uOyYI/AAAAAAAAGUM/NtqXga8TiEw/jquery_thumb%25255B6%25255D.png?imgmax=800" width="128" height="128" /&gt;&lt;/a&gt;O jQuery validator possui diversos validadores pré-codificados em sua biblioteca (.js). Esses validadores, porém, não preveêm o uso de globalização e 2 deles são afetados pela cultura : Validação numérica e validação de range numérico.&lt;/p&gt;    &lt;p&gt;Para controlar a globalização utilizaremos um plug-in chamado jQuery Globalize. Este plug-in possui métodos para tratar valores numéricos e datas levando em consideração a cultura.&lt;/p&gt;    &lt;p&gt;Porém para que a globalização funcione é necessário substituir alguns dos métodos do jQuery validator para que estes passem a utilizar o plug-in Globalize.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Plug-In Globalize&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;O &lt;a href="https://github.com/jquery/globalize"&gt;Plug-In Globalize&lt;/a&gt; é disponibilizado no GitHub, pode-se fazer o download clicando-se no botão “Zip”.&lt;/p&gt;    &lt;p&gt;Junto com o download é fornecida uma aplicação chamada “Generator” que faz a geração de arquivos de cultura, um arquivo .js para cada cultura, por exemplo, Globalize.Culture.pt-BR.js&lt;/p&gt;    &lt;p&gt;Para fazer a globalização precisará inserir um destes arquivos .js na aplicação, ou todos se desejar uma aplicação flexivel em relação a cultura.&lt;/p&gt;    &lt;p&gt;Por exemplo, caso deseje que a aplicação seja localizada para português, deverá inserir os seguintes arquivos nas páginas :&lt;/p&gt;    &lt;pre class="csharpcode"&gt;&amp;lt;script src=&lt;span class="str"&gt;&amp;quot;@Url.Content(&amp;quot;&lt;/span&gt;~/Scripts/globalize.js&lt;span class="str"&gt;&amp;quot;)&amp;quot;&lt;/span&gt; type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt; &amp;lt;/script&amp;gt; 
&amp;lt;script src=&lt;span class="str"&gt;&amp;quot;@Url.Content(&amp;quot;&lt;/span&gt;~/Scripts/cultures/Globalize.culture.pt-BR.js&lt;span class="str"&gt;&amp;quot;)&amp;quot;&lt;/span&gt; type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
  &lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;p&gt;Utilizamos então o plug-in Globalize para especificar a cultura utilizada :&lt;/p&gt;

  &lt;pre class="csharpcode"&gt;&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;
        $(&lt;span class="kwrd"&gt;function&lt;/span&gt;() {
                Globalize.culture=Globalize.culture(&lt;span class="str"&gt;&amp;quot;pt-BR&amp;quot;&lt;/span&gt;);
             });
&amp;lt;/script&amp;gt; &lt;/pre&gt;
&lt;/blockquote&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&lt;strong&gt;Mais sobre Globalização&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Nos próximos posts mostrarei scripts que junto com o plug-in de globalize permitem fazer os validadores trabalharem com múltiplas culturas.&lt;/p&gt;

  &lt;p&gt;Porém esse é só parte do problema envolvendo globalização/localização. Você pode precisar, por exemplo, que a cultura seja definida dinamicamente, a partir do servidor.&lt;/p&gt;

  &lt;p&gt;Scott Hanselman escreveu um &lt;a href="http://www.hanselman.com/blog/GlobalizationInternationalizationAndLocalizationInASPNETMVC3JavaScriptAndJQueryPart1.aspx?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+ScottHanselman+%28Scott+Hanselman+-+ComputerZen.com%29"&gt;artigo muito bom sobre globalização&lt;/a&gt;, porém observe que o código do artigo ainda utiliza uma versão antiga do plug-in Globalize.&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-8868075556064722739?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/owrUU8V-5yQ/globalizacao-no-aspnet-mvc.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-9G4eQCgwPDQ/TwuvYKxDV2I/AAAAAAAAGT8/kqHkcgGnMuI/s72-c/asp-net-mvc-3_thumb%25255B1%25255D.gif?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2012/01/globalizacao-no-aspnet-mvc.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-7382716988890712978</guid><pubDate>Thu, 10 Nov 2011 22:56:00 +0000</pubDate><atom:updated>2011-11-10T20:56:53.669-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><title>Corrigindo o controle de versão no Source Safe</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;O source safe utiliza um arquivo chamado&amp;#160; MSSCCPRJ.SCC para fazer o controle de versão do projeto.&lt;/p&gt;  &lt;p&gt;Quando, por algum motivo qualquer, esse arquivo desaparece, ao abrir o projeto passamos a receber duas desagradáveis opções : ou temporariamente removemos o controle de código fonte ou removemos em definitivo.&lt;/p&gt;  &lt;p&gt;Corrigir esse problema é simples : Basta ir no menu File –&amp;gt; Source Control –&amp;gt; Change Source Control. Com isso será exibida a tela abaixo, na qual poderemos vincular novamente nosso projeto ao source safe, gerando novamente o arquivo que estava faltando.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-L4oZ6OGAYNw/TrxWr4K8ipI/AAAAAAAAGTI/IaupuulYOsA/s1600-h/imagemcontroleversao%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="imagemcontroleversao" border="0" alt="imagemcontroleversao" src="http://lh6.ggpht.com/-nrqFky_Ow7c/TrxWtJ8FCHI/AAAAAAAAGTQ/kpMJ3neW7Rg/imagemcontroleversao_thumb%25255B2%25255D.jpg?imgmax=800" width="547" height="287" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-7382716988890712978?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/WwOyUWMRUeo/corrigindo-o-controle-de-versao-no.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-nrqFky_Ow7c/TrxWtJ8FCHI/AAAAAAAAGTQ/kpMJ3neW7Rg/s72-c/imagemcontroleversao_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/11/corrigindo-o-controle-de-versao-no.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-2587579048465991406</guid><pubDate>Wed, 09 Nov 2011 22:09:00 +0000</pubDate><atom:updated>2011-11-09T20:09:30.866-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">WPF</category><category domain="http://www.blogger.com/atom/ns#">Windows Phone</category><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>Como entender MVVM e seus Frameworks</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-d7zWFbk0TXs/Trr6FQdyuNI/AAAAAAAAGS4/fKOi64RY8uo/s1600-h/MVVM%25255B2%25255D.gif"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="MVVM" border="0" alt="MVVM" align="right" src="http://lh3.ggpht.com/-jzYPULYrtIA/Trr6GSFHoTI/AAAAAAAAGTA/t3l4XgCia2Y/MVVM_thumb.gif?imgmax=800" width="205" height="240" /&gt;&lt;/a&gt;1) Entenda a relação existente entre as partes&lt;/p&gt;  &lt;p&gt;2) Comece com os fundamentos básicos da MVVM&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;A) Nenhum código deve ser inserido no code-behind da tela&lt;/p&gt;    &lt;p&gt;B) A ViewModel nunca faz referência a nenhum elemento da tela&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;3) Com base nesses principios, monte um pequeno exemplo, uma tela simples para fazer alguns cálculos, por exemplo.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;A) Você descobrirá a necessidade da interface &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx" target="_blank"&gt;INotifyPropertyChanged&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;B) Você descobrirá a necessidade da interface &lt;a href="http://stackoverflow.com/questions/1468791/wpf-icommand-mvvm-implementation" target="_blank"&gt;ICommand&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;C) Você descobrirá a necessidade do atributo &lt;a href="http://msdn.microsoft.com/en-us/library/ms752308.aspx" target="_blank"&gt;Command&lt;/a&gt; nos buttons&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;4) Faça com que sua tela possua mais de um botão, mais de uma ação a ser disparada na ViewModel&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;A) Se ainda não descobriu, descobrirá a necessidade de uma classe &lt;a href="http://stackoverflow.com/questions/1468791/wpf-icommand-mvvm-implementation" target="_blank"&gt;RelayCommand&lt;/a&gt; implementando a interface ICommand&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;5) Faça outra tela&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;A) Você descobrirá a necessidade de uma classe ViewModelBase com algumas implementações padrões&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;6) Para ligar o ação de outros objetos (select de combobox, listbox, etc) a ações da viewmodel, você precisará de &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=6100821231091649421" target="_blank"&gt;behaviors personalizados&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;8) Compare o que desenvolveu com frameworks prontos de MVVM tal como &lt;a href="http://www.google.com.br/url?sa=t&amp;amp;source=web&amp;amp;cd=2&amp;amp;ved=0CCEQFjAB&amp;amp;url=http%3A%2F%2Fcompositewpf.codeplex.com%2F&amp;amp;ei=eAEpTpv0Ice_gQeu6bGdCw&amp;amp;usg=AFQjCNGXptacvJviuVRXzNbw8nxk7HKkow" target="_blank"&gt;Prism&lt;/a&gt; e &lt;a href="http://www.galasoft.ch/mvvm/" target="_blank"&gt;MVVM Light&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Enquanto segue esses passos, observe essas regras adicionais :&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;A) Quando sentir uma tentação de colocar código na interface, considere analisar este código pelo angulo de um comportamento padrão que se repetirá e crie um behavior personalizado&lt;/p&gt;    &lt;p&gt;B) Ainda sobre código na interface, considere que pode substituir o atributo &amp;quot;command&amp;quot; nos buttons pelo uso de um &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=4109599951139307674" target="_blank"&gt;behavior que dispare o command&lt;/a&gt;, podendo assim agregar mensagens de confirmação, mensagens de sucesso, foco em objetos e outras funcionalidades.&lt;/p&gt;    &lt;p&gt;C) Assista ao &lt;a href="http://www.bufaloinfo.com.br/eventos/default.aspx" target="_blank"&gt;webcast sobre desenvolvimento em camadas com Silverlight&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-2587579048465991406?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/5bAEHXX8DTU/como-entender-mvvm-e-seus-frameworks.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-jzYPULYrtIA/Trr6GSFHoTI/AAAAAAAAGTA/t3l4XgCia2Y/s72-c/MVVM_thumb.gif?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/11/como-entender-mvvm-e-seus-frameworks.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-7619345033775213515</guid><pubDate>Wed, 09 Nov 2011 10:09:00 +0000</pubDate><atom:updated>2011-11-09T08:09:37.694-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><title>Enterprise Library 5.0 já está disponível</title><description>&lt;p&gt;   &lt;br /&gt;&lt;a href="http://lh3.ggpht.com/-D9AeFTyluso/TrpRXYe3XZI/AAAAAAAAGSo/DAtRqlR4iak/s1600-h/entlib2.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="entlib" border="0" alt="entlib" align="right" src="http://lh3.ggpht.com/-1xFklAkGCrI/TrpRYOkQJgI/AAAAAAAAGSw/Oc1RMqTcP9g/entlib_thumb.gif?imgmax=800" width="112" height="138" /&gt;&lt;/a&gt;Mais uma vez temos uma nova versão da enterprise library. Essa versão possui uma considerável importância pois é a primeira a se integrar com o .NET Framework 4.0 e Visual Studio 2010, a última versão lidava com o framework anterior.&lt;/p&gt;  &lt;p&gt;Lembro que neste tempo de espera cheguei a esbarrar com pretensos arquitetos de software plajenando arquiteturas sobre a versão anterior mas ignorando os recursos disponíveis no VS 2010. Bad, very Bad.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Você pode ver as novidades prometidas em &lt;a href="http://msdn.microsoft.com/en-us/library/ff632023.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff632023.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Alguns pontos se destacam :&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Data Annotations&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;A enterprise library fez uma integração entre o Validation Application Block e as Data Annotations, o que é muito bom. &lt;/p&gt;    &lt;p&gt;Além disso houve uma integração com os recursos de validação do WPF.&lt;/p&gt;    &lt;p&gt;Tudo isso é muito importante pois pode estar trazendo uma padronização na forma de uso de Data Annotations para os sistemas. O WCF RIA Services utiliza bem as Data Annotations com os recursos de projeção, mas serviços WCF não tem essa facilidade. Vamos ver o que essa nova versão nos traz.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Cache Application Block&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Apenas na versão 4.0 do .NET surgiu o conceito de cache providers, o que fez uma integração com App Fabric. Isso dispensa muita coisa que o cache application block da enterprise library possuia, cabe vermos de que forma o recurso nativo está sendo aproveitado nesta nova versão.&lt;/p&gt;    &lt;p&gt;     &lt;br /&gt;Assim que conferir as novidades, publico algo sobre o assunto&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-7619345033775213515?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/WyVq0ehHv0A/enterprise-library-50-ja-esta.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-1xFklAkGCrI/TrpRYOkQJgI/AAAAAAAAGSw/Oc1RMqTcP9g/s72-c/entlib_thumb.gif?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/11/enterprise-library-50-ja-esta.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-281281046960565297</guid><pubDate>Wed, 05 Oct 2011 16:51:00 +0000</pubDate><atom:updated>2011-10-05T13:51:04.488-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><title>Gerando documentação XML : SandCastle</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Os comentários em XML são muito úteis e fáceis de inserir no código. Provavelmente você mesmo já deve ter pensado : “Como extrair esses comentários em XML para gerar uma documentação ?”&lt;/p&gt;  &lt;p&gt;Existe uma ferramenta chamada SandCastle que faz isso, mas seu uso não é trivial, o que faz com que poucos se aprofundem no assunto.&lt;/p&gt;  &lt;p&gt;Justamente pelo fato do uso não ser trivial, crie um .BAT que simplifica muito o trabalho com o sandcastle.&lt;/p&gt;  &lt;p&gt;Veja abaixo os passos para gerar a documentação&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="5"&gt;Passo-a-Passo&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Baixe o SandCastle - &lt;a href="http://sandcastle.codeplex.com/"&gt;http://sandcastle.codeplex.com/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Configure o projeto para gerar documentação – /doc. Nas propriedades do projeto, tab “Build”, marque a opção “XML Documentation File” &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-H1wlwU5Hjws/ToyK86fItLI/AAAAAAAAGSU/7K-0z7-10wc/s1600-h/SNAG-01296.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAG-0129" border="0" alt="SNAG-0129" src="http://lh3.ggpht.com/-RR4JivSvZ_0/ToyK99znh2I/AAAAAAAAGSY/MD15bzNQA9o/SNAG-0129_thumb4.jpg?imgmax=800" width="548" height="449" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Copie o arquivo .bat para o diretório debug da sua aplicação. &lt;/li&gt;    &lt;li&gt;Faça um rebuild (precisava colocar esse passo ;-) &lt;/li&gt;    &lt;li&gt;Abra um prompt na pasta debug (shift + right click no windows explorer é seu amigo) &lt;/li&gt;    &lt;li&gt;Rode o .bat :&amp;#160; &amp;gt; Documentar NomeDoProjeto &lt;/li&gt; &lt;/ul&gt; &lt;span id="fullpost"&gt;   &lt;p&gt;&lt;strong&gt;Resultado&lt;/strong&gt;&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;O SandCastle irá gerar uma pasta output contendo um .chm com a documentação do projeto, tanto contendo a estrutura das suas classes como seus comentários XML extraidos do código.&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;&lt;strong&gt;Imprevistos&lt;/strong&gt;&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;O código do arquivo .BAT tenta contornar problemas de path, mas considera tudo instalado em seu caminho default. Se não estiver, precisará manipular o código e/ou contornar de outra forma.&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;&lt;strong&gt;Explicações Detalhadas&lt;/strong&gt;&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;Veja mais detalhes sobre o parâmetro /doc : &lt;a href="http://msdn.microsoft.com/en-us/library/f64ezf9b(v=vs.80).aspx"&gt;http://msdn.microsoft.com/en-us/library/f64ezf9b(v=vs.80).aspx&lt;/a&gt;&amp;#160;&lt;/p&gt;      &lt;p&gt;O SandCastle tem o mal hábito de não funcionar porque de fato são necessários 12 passos entre a compilação e a geração da documentação. São tais passos que estão ocultos no .BAT que criei. Veja os passo em &lt;a href="http://blogs.msdn.com/b/sandcastle/archive/2006/07/29/682398.aspx"&gt;http://blogs.msdn.com/b/sandcastle/archive/2006/07/29/682398.aspx&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;Pegadinha adicional : O VS por default gera o .xml com o nome do projeto, mas a ferramenta chamada &lt;em&gt;&lt;strong&gt;BuildAssembler&lt;/strong&gt;&lt;/em&gt; está configurada para usar por default um arquivo chamado &lt;em&gt;&lt;strong&gt;comment.xml&lt;/strong&gt;&lt;/em&gt;, exatamente com esse nome.&lt;/p&gt;      &lt;p&gt;Para resolver, o .BAT que criei troca o nome do arquivo .xml&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;&lt;strong&gt;Código do Arquivo .BAT&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;(copie e cole em um arquivo .bat)      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;@Echo off&lt;/p&gt;    &lt;p&gt;REM ******************* Testa o parâmetro *******************&lt;/p&gt;    &lt;p&gt;if {%1}=={} (      &lt;br /&gt;&amp;#160;&amp;#160; @echo Por favor, informe o nome do assembly       &lt;br /&gt;&amp;#160;&amp;#160; goto End       &lt;br /&gt;)&lt;/p&gt;    &lt;p&gt;REM ********************** Redefine o path *********************&lt;/p&gt;    &lt;p&gt;set path=%path%;%DXROOT%productiontools      &lt;br /&gt;set TOOLSPATH=%ProgramFiles%       &lt;br /&gt;if exist &amp;quot;%ProgramFiles% (x86)&amp;quot; set TOOLSPATH=%ProgramFiles(x86)%&lt;/p&gt;    &lt;p&gt;set PATH=%TOOLSPATH%\HTML Help Workshop;%TOOLSPATH%\Microsoft Help 2.0 SDK;%PATH%&lt;/p&gt;    &lt;p&gt;REM ********************* Remove diretórios existentes *****************&lt;/p&gt;    &lt;p&gt;if exist output rmdir output /s /q      &lt;br /&gt;if exist chm rmdir chm /s /q&lt;/p&gt;    &lt;p&gt;REM ******************** Preparando arquivo de documentação ***************&lt;/p&gt;    &lt;p&gt;if not exist %1.xml (      &lt;br /&gt;&amp;#160;&amp;#160; @echo Erro : Não há arquivo de documentação       &lt;br /&gt;&amp;#160;&amp;#160; goto End       &lt;br /&gt;)&lt;/p&gt;    &lt;p&gt;if exist %1.xml copy /y %1.xml comments.xml&lt;/p&gt;    &lt;p&gt;REM ********** Call MRefBuilder ****************************&lt;/p&gt;    &lt;p&gt;MRefBuilder %2.dll /out:reflection.org&lt;/p&gt;    &lt;p&gt;REM ********** Apply Transforms ****************************&lt;/p&gt;    &lt;p&gt;XslTransform /xsl:&amp;quot;%DXROOT%\ProductionTransforms\ApplyVSDocModel.xsl&amp;quot; reflection.org/xsl:&amp;quot;%DXROOT%\ProductionTransforms\AddFriendlyFilenames.xsl&amp;quot; /out:reflection.xml /arg:IncludeAllMembersTopic=true /arg:IncludeInheritedOverloadTopics=true&lt;/p&gt;    &lt;p&gt;XslTransform /xsl:&amp;quot;%DXROOT%\ProductionTransforms\ReflectionToManifest.xsl&amp;quot;&amp;#160; reflection.xml /out:manifest.xml&lt;/p&gt;    &lt;p&gt;call &amp;quot;%DXROOT%\Presentation\vs2005\copyOutput.bat&amp;quot;&lt;/p&gt;    &lt;p&gt;REM **************Generate an intermediate Toc file that simulates the 2005 TOC format.&lt;/p&gt;    &lt;p&gt;XslTransform /xsl:&amp;quot;%DXROOT%\ProductionTransforms\createvstoc.xsl&amp;quot; reflection.xml /out:toc.xml&lt;/p&gt;    &lt;p&gt;REM ************** Montar Pastas ***********************&lt;/p&gt;    &lt;p&gt;call %DXROOT%\Presentation\Prototype\copyOutput.bat&lt;/p&gt;    &lt;p&gt;REM ********** Call BuildAssembler ****************************&lt;/p&gt;    &lt;p&gt;BuildAssembler /config:&amp;quot;%DXROOT%\Presentation\vs2005\configuration\sandcastle.config&amp;quot; manifest.xml&lt;/p&gt;    &lt;p&gt;REM ********** Gerar HTML Help Project ****************************&lt;/p&gt;    &lt;p&gt;XslTransform /xsl:%DXROOT%\ProductionTransforms\ReflectionToChmProject.xsl reflection.xml /out:Output\test.hhp&lt;/p&gt;    &lt;p&gt;REM ********** Gerar a table of contents ****************************&lt;/p&gt;    &lt;p&gt;XslTransform /xsl:%DXROOT%\ProductionTransforms\createvstoc.xsl reflection.xml /out:toc.xml&lt;/p&gt;    &lt;p&gt;REM ********** Gerar as informações do projeto de help *******************&lt;/p&gt;    &lt;p&gt;     &lt;br /&gt;XslTransform /xsl:%DXROOT%\ProductionTransforms\TocToChmContents.xsl toc.xml /out:Output\test.hhc&lt;/p&gt;    &lt;p&gt;XslTransform /xsl:%DXROOT%\ProductionTransforms\ReflectionToChmIndex.xsl reflection.xml /out:Output\test.hhk&lt;/p&gt;    &lt;p&gt;REM ********** Executar o processamento do Help ****************************&lt;/p&gt;    &lt;p&gt;hhc output\test.hhp&lt;/p&gt;    &lt;p&gt;:End&lt;/p&gt;    &lt;div&gt;&lt;/div&gt; &lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-281281046960565297?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/0u6UFEqT1as/gerando-documentacao-xml-sandcastle.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-RR4JivSvZ_0/ToyK99znh2I/AAAAAAAAGSY/MD15bzNQA9o/s72-c/SNAG-0129_thumb4.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/10/gerando-documentacao-xml-sandcastle.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-341710050527665773</guid><pubDate>Mon, 22 Aug 2011 07:07:00 +0000</pubDate><atom:updated>2011-08-22T04:07:47.153-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows Phone</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>Windows Phone App : Eventos da Aplicação</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-sIjjD1d8S_s/TlIAPjHHoII/AAAAAAAAGSA/8-JypW3Ha8M/s1600-h/windows-phone2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="windows-phone" border="0" alt="windows-phone" align="right" src="http://lh5.ggpht.com/-_8YoI1kDU8o/TlIAQfP5hhI/AAAAAAAAGSE/pl7M6mMFajE/windows-phone_thumb.jpg?imgmax=800" width="240" height="240" /&gt;&lt;/a&gt;Uma aplicação no Windows Phone possui um conjunto de eventos iniciais que podem confundir um pouco o desenvolvedor. Vamos analisar melhor esses eventos :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Launching : Quando a aplicação está sendo iniciada &lt;/li&gt;    &lt;li&gt;Closing : Quando a aplicação está sendo encerrada &lt;/li&gt;    &lt;li&gt;Activating : Quando a aplicação está sendo ativada &lt;/li&gt;    &lt;li&gt;Deactivating : Quando a aplicação está sendo desativada &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;A definição pode inicialmente parecer simples, mas afinal, qual a diferença entre Launching e Activating ? E entre Closing e Deactivating ?&lt;/p&gt;  &lt;p&gt;A principio Launching e Closing representam a abertura e fechamento da aplicação. Activating e Deactivating representam a aplicação sendo ativada ou colocada em background. Essa é a definição teórica.&lt;/p&gt;  &lt;p&gt;Na prática em ambos os casos (fechar ou ir para background) &lt;em&gt;a aplicação é totalmente retirada da memória do Windows Phone&lt;/em&gt;, sendo inicializada novamente no Launching ou Activating.&lt;/p&gt;  &lt;p&gt;Desta forma fica a critério do desenvolvedor criar ou não uma experiência de usuário diferenciada entre o fechamento e a colocação da aplicação em background. Caso o desenvolvedor queira, pode simplesmente fazer com que as operações sejam equivalentes para a aplicação.&lt;/p&gt;  &lt;p&gt;Porém uma outra dúvida constante é do ponto de vista do usuário : Qual a diferença entre Closing e Deactivating para o usuário ? Como o usuário fecha uma aplicação e como a manda para o background ?&lt;/p&gt;  &lt;p&gt;A ação oposta também é confusa : Como o usuário inicializa uma aplicação (Launching) e como apenas ativa novamente (Activating) ?&lt;/p&gt;  &lt;p&gt;Para ficar mais claro o que causa cada evento, acompanhe uma sequencia de ações no telefone :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Você inicializa a aplicação no menu – está ocorrendo o Launching &lt;/li&gt;    &lt;li&gt;Você aperta o botão “start” no telefone – Ocorre o Deactivating, a aplicação vai para o background &lt;/li&gt;    &lt;li&gt;Você aperta “back” até voltar para a aplicação – Ocorre o Activating &lt;/li&gt;    &lt;li&gt;Você bloqueia o telefone – Ocorre o Deactivating &lt;/li&gt;    &lt;li&gt;O telefone é desbloqueado – Ocorre o Activating &lt;/li&gt;    &lt;li&gt;Você aperta o botão “start” no telefone – Ocorre o Deactivating &lt;/li&gt;    &lt;li&gt;Você inicializa novamente a aplicação pelo menu – Ocorre o Launching &lt;/li&gt;    &lt;li&gt;Você aperta o “back” no telefone – Ocorre o Closing &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Resumindo&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Launching só ocorre quando a aplicação é inicializada pelo menu &lt;/li&gt;    &lt;li&gt;Closing só ocorre quando pressiona-se “back” na aplicação &lt;/li&gt;    &lt;li&gt;Deactivating ocorre pressionando “start” ou iniciando uma “task” (envio de e-mail, câmera, bloqueio, etc). &lt;/li&gt;    &lt;li&gt;Activating ocorre ao retornar da “task” para a aplicação ou ao pressionar “back” até retornar para a aplicação &lt;/li&gt;    &lt;li&gt;Após um Deactivating feito com “start”, chamar a aplicação pelo menu continua gerando um Lauching, o Activating pode não voltar a ocorrer. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Programando os eventos&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Tudo em memória da aplicação é perdido entre o fechamento e a abertura. Por exemplo, o bloqueio do telefone fará a aplicação perder dados da tela. Cabe a aplicação fazer a gravação e recuperação de dados.&lt;/p&gt;    &lt;p&gt;Nos eventos Launching e Activating as ações precisam ser assíncronas para garantir uma inicialização rápida da aplicação.&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-341710050527665773?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/dXv0Kd-rKv4/windows-phone-app-eventos-da-aplicacao.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-_8YoI1kDU8o/TlIAQfP5hhI/AAAAAAAAGSE/pl7M6mMFajE/s72-c/windows-phone_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/08/windows-phone-app-eventos-da-aplicacao.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-5384380561343678132</guid><pubDate>Sun, 14 Aug 2011 03:02:00 +0000</pubDate><atom:updated>2011-08-14T00:02:59.815-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows Phone</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>MVVM no Windows Phone : Código fonte e PPTs</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;O webcast na noite de sábado, 13/08, foi um sucesso, todos os participantes gostaram muito da demonstração do uso do padrão MVVM com uma aplicação no Windows Phone.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.bufaloinfo.com.br/download/webcastmvvm20110813.zip" target="_blank"&gt;Baixe o código fonte e ppt da apresentação&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Aproveite também e leia os seguintes posts ligados ao tema da apresentação : &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=5526333359739873633"&gt;MVVM no Windows Phone 7 e o Command Binding&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=4109599951139307674"&gt;CommandBehavior com foco e MessageBox&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=8934208569184353706"&gt;CommandBehavior e Processamento Assíncrono&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-5384380561343678132?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/xouRprl3-SA/mvvm-no-windows-phone-codigo-fonte-e.html</link><author>noreply@blogger.com (Dennes)</author><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/08/mvvm-no-windows-phone-codigo-fonte-e.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-8934208569184353706</guid><pubDate>Wed, 10 Aug 2011 02:59:00 +0000</pubDate><atom:updated>2011-08-09T23:59:21.661-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows Phone</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>CommandBehavior e Processamento Assíncrono</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-RmAs7k8X_Jo/TkHz8gRQxnI/AAAAAAAAGRo/Dr8NH58J43g/s1600-h/microsoft_silverlight_c2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="microsoft_silverlight_c" border="0" alt="microsoft_silverlight_c" align="right" src="http://lh4.ggpht.com/-lBCX_I-Dyv0/TkH0BmR4utI/AAAAAAAAGRs/HEubIqvPZ8s/microsoft_silverlight_c_thumb.jpg?imgmax=800" width="215" height="240" /&gt;&lt;/a&gt;Esse é o 3o post sobre MVVM com behaviors no Windows Phone. Você pode querer ver os dois anteriores :&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;MVVM no Windows Phone 7 e Command Binding&lt;/p&gt;    &lt;p&gt;CommandBehavior com Foco e MessageBox&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Neste 3o post vamos tratar de processamento assíncrono.&lt;/p&gt;  &lt;p&gt;No post anterior implementamos várias funcionalidades adicionais no CommandBehavior, após a execução do Command. Porém nem tudo são flores : Em muitas situações a execução do Command pode ser assíncrona. A execução pode retornar antes da tarefa se encerrar.&lt;/p&gt;  &lt;p&gt;Neste caso não podemos simplesmente inserir as tarefas adicionais (foco e messagebox) após a execução do command. Precisamos que o command dispare um evento informando que a tarefa foi encerrada.&lt;/p&gt;  &lt;p&gt;Vamos aos passos para essa implementação :&lt;/p&gt;  &lt;blockquote&gt;   &lt;ul&gt;     &lt;li&gt;No RelayCommand, crie um evento Finalizou &lt;/li&gt;   &lt;/ul&gt;    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; height: 45px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;     &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;       &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;event&lt;/span&gt; EventHandler Finalizou;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;ul&gt;
    &lt;li&gt;Ainda no RelayCommand, crie um método chamado Finalizar que dispare o evento Finalizou &lt;/li&gt;
  &lt;/ul&gt;

  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
    &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Finalizar()&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (Finalizou != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;         Finalizou(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; EventArgs());&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;p&gt;É a ViewModel que sabe quando a tarefa foi finalizada ou não, ela precisará disparar o método Finalizar&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;Altere o método “Clicou” do CommandBehavior para que as tarefas adicionais (foco e messagebox em nosso exemplo) sejam executadas apenas no evento Finalizou &lt;/li&gt;
  &lt;/ul&gt;

  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
    &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; clicou(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;    &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     ((RelayCommand)CommandObject).Finalizou +=&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;         (s, e2) =&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (ExibirErro)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;                 {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;                     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (((RelayCommand)CommandObject).ErrorMessage != &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;                     { &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;                     MessageBox.Show(((RelayCommand)CommandObject).ErrorMessage);&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;                     ((RelayCommand)CommandObject).ErrorMessage = &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;                     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;                 }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (Foco != &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt;                 {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt;                     Control ct = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt;                     ct = (Control)botao.FindName(Foco);&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt;  19:&lt;/span&gt;                     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (ct != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt;  20:&lt;/span&gt;                     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt;  21:&lt;/span&gt;                         ct.Focus();&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt;  22:&lt;/span&gt;                     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt;  23:&lt;/span&gt;                 }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum24"&gt;  24:&lt;/span&gt;         };&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum25"&gt;  25:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum26"&gt;  26:&lt;/span&gt;     CommandObject.Execute(&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum27"&gt;  27:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum28"&gt;  28:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;ul&gt;
    &lt;li&gt;É tarefa da ViewModel disparar o método Finalizar &lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;O suporte a tarefas assíncronas é um passo muito importante para a estrutura do MVVM no Windows Phone.&lt;/p&gt;

  &lt;p&gt;&lt;a href="http://www.bufaloinfo.com.br/download/CommandBehaviorparte2.zip" target="_blank"&gt;Baixe o código fonte das classes&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-8934208569184353706?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/i4TKYe8vPZ8/commandbehavior-e-processamento.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-lBCX_I-Dyv0/TkH0BmR4utI/AAAAAAAAGRs/HEubIqvPZ8s/s72-c/microsoft_silverlight_c_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/08/commandbehavior-e-processamento.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-8263644806517245684</guid><pubDate>Wed, 03 Aug 2011 20:58:00 +0000</pubDate><atom:updated>2011-08-03T18:15:57.399-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows Phone</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>Encurt.z 1.0 no MarketPlace do Windows Phone</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-R7BpUueC4Ow/Tjm2SNMC_0I/AAAAAAAAGRg/fM3Tw16XkEc/s1600-h/SNAG-0104%25255B2%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAG-0104" border="0" alt="SNAG-0104" align="right" src="http://lh6.ggpht.com/-8V--DvxRAwA/Tjm2WDQw3EI/AAAAAAAAGRk/wOXReltYvjk/SNAG-0104_thumb.png?imgmax=800" width="144" height="240" /&gt;&lt;/a&gt;Está disponível a primeira aplicação da Búfalo para o Windows Phone : Encurt.z é uma aplicação para encurtar URL’s utilizando os recursos do migre.me.&lt;/p&gt;  &lt;p&gt;É bem simples, como vocês irão notar, uma funcionalidade simples mas que ainda assim já foi útil várias vezes para mim.&lt;/p&gt;  &lt;p&gt;A aplicação continua evoluindo e novos recursos serão adicionados, tal como a possibilidade de twittar direto da aplicação bem como acompanhar as estatísticas das URL’s encurtadas, além, também, de ver as notícias mais clicadas e retuitadas no migre.me.&lt;/p&gt;  &lt;p&gt;Comentem o que acharam da aplicação e, para vocês, qual seria a funcionalidade mais prioritária a ser implementada.&lt;/p&gt;  &lt;p&gt;A propósito : &lt;strong&gt;É GRÁTIS&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://windowsphone.com/s?appid=cb3bb53e-dea9-e011-a53c-78e7d1fa76f8" target="_blank"&gt;Baixe agora a aplicação para seu Windows Phone&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-8263644806517245684?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/MRe-0eLfOPM/encurtz-10-no-marketplace-do-windows.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-8V--DvxRAwA/Tjm2WDQw3EI/AAAAAAAAGRk/wOXReltYvjk/s72-c/SNAG-0104_thumb.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/08/encurtz-10-no-marketplace-do-windows.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-4109599951139307674</guid><pubDate>Thu, 28 Jul 2011 03:47:00 +0000</pubDate><atom:updated>2011-07-28T00:47:18.888-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows Phone</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>CommandBehavior com foco e MessageBox</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-IbcNN8N42dk/TjDbuTkhMHI/AAAAAAAAGRY/LWPXiYIIYoY/s1600-h/microsoft_silverlight_c2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="microsoft_silverlight_c" border="0" alt="microsoft_silverlight_c" align="right" src="http://lh6.ggpht.com/-85eXvvqCyRU/TjDbw7FqiJI/AAAAAAAAGRc/oAcRVnYniW0/microsoft_silverlight_c_thumb.jpg?imgmax=800" width="215" height="240" /&gt;&lt;/a&gt;Mostrei anteriormente como construir um CommandBehavior para usar MVVM no Windows Phone. Para o &lt;a title="Silverlight" href="http://www.microsoft.com/silverlight/" target="_blank"&gt;Silverlight&lt;/a&gt; a diferença é pequena (usar dependency property ao invés de bindingListener, mas isso é outro assunto).&lt;/p&gt;  &lt;p&gt;Continuando com a aplicação de MVVM, existem pequenas tarefas para as quais é mais difícil evitar código na interface : atribuir o foco a um objeto, exibir uma messagebox, pequenas tarefas de interface.&lt;/p&gt;  &lt;p&gt;O &lt;a href="http://www.google.com.br/url?sa=t&amp;amp;source=web&amp;amp;cd=2&amp;amp;ved=0CCEQFjAB&amp;amp;url=http%3A%2F%2Fcompositewpf.codeplex.com%2F&amp;amp;ei=eAEpTpv0Ice_gQeu6bGdCw&amp;amp;usg=AFQjCNGXptacvJviuVRXzNbw8nxk7HKkow" target="_blank"&gt;Prism&lt;/a&gt; propõem algumas soluções para isso, porém para problemas simples prefiro soluções mais simples e deixar o Prism para problemas mais complexos.&lt;/p&gt;  &lt;p&gt;Vamos ver como implementar isso no CommandBehavior, o mesmo CommandBehavior do artigo anterior.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Atribuindo Foco a um objeto&lt;/strong&gt;&lt;/p&gt; &lt;span id="fullpost"&gt;   &lt;blockquote&gt;     &lt;p&gt;&lt;strong&gt;Problema :&lt;/strong&gt; Após o término da execução de um command, definir o foco em um determinado objeto.&lt;/p&gt;      &lt;p&gt;&lt;strong&gt;Solução :&lt;/strong&gt; O CommandBehavior é responsável pela execução do Command, então também pode, após a execução, definir o foco para um objeto.&lt;/p&gt;      &lt;p&gt;&lt;strong&gt;Passo 1 :&lt;/strong&gt; Criar uma propriedade chamada “Foco” que conterá o nome do objeto que receberá o foco.&lt;/p&gt;      &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;       &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;         &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Foco&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; { get; set; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;p&gt;&lt;strong&gt;Passo 2 :&lt;/strong&gt; Após a execução do Command, atribuir o foco ao objeto&lt;/p&gt;

    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
      &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; clicou(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; { &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     CommandObject.Execute(&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (Foco != &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty)&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;         ((Control)botao.FindName(Foco)).Focus();&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;&lt;strong&gt;Exibindo uma MessageBox de erro&lt;/strong&gt;&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;Problema : Quando ocorrer um erro na execução do Command, exibir uma MessageBox com a mensagem de erro.&lt;/p&gt;

    &lt;p&gt;Solução : Mais uma vez o CommandBehavior pode verificar a existência de um erro e se encarregar de exibir a mensagem de erro.&lt;/p&gt;

    &lt;p&gt;&lt;strong&gt;Passo 1 :&lt;/strong&gt; Criar uma propriedade no ICommand para guardar a mensagem de erro&lt;/p&gt;

    &lt;p&gt;Saber se ocorreu ou não um erro não é tarefa do Behavior, mas da ViewModel. A ViewModel pode preencher uma mensagem de erro no Command e o Behavior se encarrega apenas de exibir.&lt;/p&gt;

    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
      &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; ErrorMessage&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     get;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     set;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;p&gt;&lt;strong&gt;Passo 2 :&lt;/strong&gt; Criar uma propriedade boolean, “ExibirErro”, no Behavior, para ativar ou não a exibição da mensagem&lt;/p&gt;

    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
      &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; ExibirErro&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     get;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     set;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;p&gt;&lt;strong&gt;Passo 3 :&lt;/strong&gt; Após a execução do Command, exibir a mensagem de erro.&lt;/p&gt;

    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
      &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; clicou(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; { &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     CommandObject.Execute(&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (Foco != &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty)&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;         ((Control)botao.FindName(Foco)).Focus();&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (ExibirErro)&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;         MessageBox.Show(((RelayCommand)CommandObject).ErrorMessage);&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;         ((RelayCommand)CommandObject).ErrorMessage = &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;Sem dúvida esse é apenas o inicio das possibilidades. Baseado nessas idéias você poderá criar soluções para vários outros problemas.&lt;/p&gt;

    &lt;p&gt;&lt;a href="http://www.bufaloinfo.com.br/download/CommandBehaviorParte2.zip" target="_blank"&gt;Baixe as classes usadas nesse exemplo&lt;/a&gt;&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-4109599951139307674?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/BhauzCWFaHk/commandbehavior-com-foco-e-messagebox.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-85eXvvqCyRU/TjDbw7FqiJI/AAAAAAAAGRc/oAcRVnYniW0/s72-c/microsoft_silverlight_c_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/07/commandbehavior-com-foco-e-messagebox.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-5526333359739873633</guid><pubDate>Wed, 27 Jul 2011 04:29:00 +0000</pubDate><atom:updated>2011-07-27T01:29:15.484-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows Phone</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>MVVM no Windows Phone 7 e o Command Binding</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-uXRpHBKx4Ig/Ti-T63t6WfI/AAAAAAAAGRQ/2dhwioyAccI/s1600-h/microsoft_silverlight_c2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="microsoft_silverlight_c" border="0" alt="microsoft_silverlight_c" align="right" src="http://lh5.ggpht.com/-0ZQTDrLIejQ/Ti-UDIc1gaI/AAAAAAAAGRU/9l-OMAFdiN4/microsoft_silverlight_c_thumb.jpg?imgmax=800" width="215" height="240" /&gt;&lt;/a&gt;O problema que vou explicar – e resolver – neste artigo pode ser atingido de diversas formas diferentes, além de possuir diversas soluções diferentes.&lt;/p&gt;  &lt;p&gt;Você pode estar sofrendo de um dos seguintes males :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Você não faz idéia de para onde foi a propriedade Command dos botões &lt;/li&gt;    &lt;li&gt;Você fez uma implementação linda de ICommand e não sabe porque está recebendo AG_E_PARSER_BAD_PROPERTY_VALUE como resultado &lt;/li&gt;    &lt;li&gt;Você está tentando usar o InvokeCommand Behavior e não sabe o que fazer com a propriedade CommandName &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Tudo isso pode se resumir a um problema :&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&lt;strong&gt;Você está tentando usar MVVM no Windows Phone 7 e está mais perdido do que cego em tiroteio&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Primeiramente, vamos começar dando algumas respostas que irão explicar para você o porquê dos problemas :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Windows Phone 7 roda com Silverlight 3 e não Silverlight 4. Por isso muitas das comodidades com as quais você se acostumou no Silverlight 4 (tal como a propriedade Command nos buttons) não funcionam no Windows Phone. &lt;/li&gt;    &lt;li&gt;Silverlight 3 apenas permite realização de databindings em objetos derivados de FrameworkElement. Para os demais, não tem DependencyProperty que salve. &lt;/li&gt;    &lt;li&gt;Behaviors e afins não são derivados de FrameworkElement, portanto não não suportam databinding &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Como Jack, vamos por partes.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Problema 1 : Como fazer MVVM sem a propriedade Command ?&lt;/strong&gt;&lt;/p&gt; &lt;span id="fullpost"&gt;   &lt;blockquote&gt;     &lt;p&gt;A resposta é simples : Interactivity! Use Behaviors e afins para disparar o Command.&lt;/p&gt;      &lt;p&gt;As soluções são tantas e tão variadas que até confunde :&lt;/p&gt;      &lt;ul&gt;       &lt;li&gt;Você pode criar uma trigger action que possa ser inserida e disparada de dentro de EventTriggers &lt;/li&gt;        &lt;li&gt;Você pode usar o InvokeCommand action para disparar um command. Porém em seu formato silverlight 3 o InvokeCommand exige que exista um behavior anexado ao botão e ele irá se referir ao command pelo nome de command exposto pelo behavior. &lt;/li&gt;        &lt;li&gt;Você pode criar um behavior que já faça a interceptação de um evento e o dispara do command. &lt;/li&gt;     &lt;/ul&gt;      &lt;p&gt;Com soluções tão variadas a escolha chega perto de ser uma opção pessoal. Vou fazer as demonstrações neste texto com a 3a opção, um behavior.&lt;/p&gt;      &lt;p&gt;Porém : Qualquer das 3 soluções morre na praia se não houver como vincular o objeto com o command via binding, sem isso é impossível criar uma solução genérica o que torna o trabalho de implementação muito grande.&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;&lt;strong&gt;Problema 2 : Como fazer Binding em propriedades de um Behavior no Silverlight 3 ?&lt;/strong&gt;&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;A resposta é simples : Não dá. Precisamos contornar esse problema.&lt;/p&gt;      &lt;p&gt;Se usarmos essa expressão abaixo em um objeto que não aceita Binding : &lt;/p&gt;      &lt;p align="center"&gt;&lt;em&gt;Command=”{Binding MeuCommand}”&lt;/em&gt;&lt;/p&gt;      &lt;p&gt;O objeto considera que o valor “{Binding MeuCommand}” está sendo atribuido para a propriedade Command. Mas que valor é esse ? Simples : É um valor do tipo Binding&lt;/p&gt;      &lt;p&gt;&lt;em&gt;&lt;strong&gt;Primeiro passo para a solução :&lt;/strong&gt;&lt;/em&gt; Fazer com que a propriedade seja do tipo Binding&lt;/p&gt;      &lt;p&gt;Desta forma guardamos o binding dentro da classe e precisaremos apenas processá-lo para obter seu valor. Porém, como processar um Binding ?&lt;/p&gt;      &lt;p&gt;&lt;strong&gt;&lt;em&gt;Segundo passo para a solução :&lt;/em&gt;&lt;/strong&gt; Criar uma attached property dummy no objeto pai que sirva para processar e obter o valor do binding.&lt;/p&gt;      &lt;p&gt;Relativamente simples, uma solução de 2 passos, mas nem por isso deixa de ser um bacalhau muito feio.&lt;/p&gt;      &lt;p&gt;Para o 2o passo, supostamente o mais trabalhoso, já temos uma classe criada com o nome de BindingListener, justamente para fazer esse trabalho. Como única solução, essa classe (mesmo sendo bacalhau) passou a fazer parte do &lt;a href="http://www.google.com.br/url?sa=t&amp;amp;source=web&amp;amp;cd=2&amp;amp;ved=0CCEQFjAB&amp;amp;url=http%3A%2F%2Fcompositewpf.codeplex.com%2F&amp;amp;ei=eAEpTpv0Ice_gQeu6bGdCw&amp;amp;usg=AFQjCNGXptacvJviuVRXzNbw8nxk7HKkow" target="_blank"&gt;Prism&lt;/a&gt;, framework da Microsoft para implementação de MVVM com Silverlight.&lt;/p&gt;      &lt;blockquote&gt;       &lt;p&gt;Veja detalhes sobre a &lt;a href="http://blois.us/blog/2009/04/datatrigger-bindings-on-non.html"&gt;implementação original do BindingListener&lt;/a&gt;&lt;/p&gt;     &lt;/blockquote&gt;   &lt;/blockquote&gt;    &lt;p&gt;&lt;strong&gt;Problema 3 : Criar o Behavior&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Nesta altura já não é um problema, já estamos com todas as ferramentas em mãos. É importante destacar, porém, que os exemplos que encontrei na web usando a classe BindingListener em geral continham erros, excesso de código desnecessário.&lt;/p&gt;    &lt;p&gt;Vamos então fazer uma criação passo-a-passo do Behavior que chamaremos de CommandBehavior.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Passo 1 : Iniciando&lt;/strong&gt;&lt;/p&gt;    &lt;blockquote&gt;     &lt;ul&gt;       &lt;li&gt;É necessário uma referência para a biblioteca System.Windows.Interactivity &lt;/li&gt;        &lt;li&gt;É necessário um using para System.Windows.Interactivity &lt;/li&gt;        &lt;li&gt;Crie a classe CommandBehavior herdando de Behavior&amp;lt;Button&amp;gt;. O uso do generics indicará o tipo de objeto para o qual o behavior é feito. &lt;/li&gt;     &lt;/ul&gt;      &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;       &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;         &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; CommandBehavior : Behavior&amp;lt;Button&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/blockquote&gt;
  &lt;style type="text/css"&gt;




.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;p&gt;&lt;strong&gt;Passo 2 : Características Básicas&lt;/strong&gt;&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;ul&gt;
      &lt;li&gt;Crie uma variável privada do tipo button na qual guardaremos o button no qual o behavior está vinculado. &lt;/li&gt;

      &lt;li&gt;Faça um override do método onAttached para capturar o button no momento em que o behavior for vinculado ao button. &lt;/li&gt;

      &lt;li&gt;Capture o evento Click do button, é quando nosso behavior precisará fazer sua tarefa principal : Executar o Command. &lt;/li&gt;

      &lt;li&gt;Crie o método para o click do button, por enquanto vazio. &lt;/li&gt;
    &lt;/ul&gt;

    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
      &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; CommandBehavior : Behavior&amp;lt;Button&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     Button botao;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; clicou(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnAttached()&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;base&lt;/span&gt;.OnAttached();&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;         botao = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.AssociatedObject;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;         botao.Click += clicou;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;&lt;strong&gt;Passo 3 : Criando a propriedade Command&lt;/strong&gt;&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;ul&gt;
      &lt;li&gt;Crie uma variável privada do tipo Binding &lt;/li&gt;

      &lt;li&gt;Crie uma propriedade chamada Command do tipo Binding &lt;/li&gt;
    &lt;/ul&gt;

    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
      &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Binding _Command;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Binding Command&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     get&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _Command;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;     set&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;         _Command = &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;p&gt;&lt;strong&gt;&lt;em&gt;Importante :&lt;/em&gt;&lt;/strong&gt; Ao contrário de muitos exemplos na web, essa propriedade não precisa ser uma DependencyProperty, é justamente pelo fato dos behaviors não suportarem o trabalho com tais propriedades que teremos mais trabalho.&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;&lt;strong&gt;Passo 4 : ICommand&lt;/strong&gt;&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;Crie uma propriedade chamada CommandObject do tipo ICommand, apenas com Get.&lt;/p&gt;

    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
      &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; ICommand CommandObject&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     get&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;         &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;&lt;strong&gt;Passo 5 : Utilizando o BindingListener&lt;/strong&gt;&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;ul&gt;
      &lt;li&gt;Defina uma variável privada do tipo BindingListener. &lt;/li&gt;

      &lt;li&gt;Crie um construtor para o CommandBehavior e instancie o BindingListener &lt;/li&gt;

      &lt;li&gt;Crie o tratamento para o change do BindingListener &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;&lt;strong&gt;&lt;em&gt;Importante :&lt;/em&gt;&lt;/strong&gt; o “change” do bindinglistener na verdade será executado só uma vez, quando ele se tornar “pronto” para fazer o trabalho com o binding.&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Crie o método CanExecute &lt;/li&gt;

      &lt;li&gt;Crie o método para o evento CanExecuteChanged, chamando o CanExecute &lt;/li&gt;
    &lt;/ul&gt;

    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
      &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; BindingListener listener;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; CommandBehavior()&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     listener = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BindingListener(MudouBinding);&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; MudouBinding(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, BindingChangedEventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;     CommandObject.CanExecuteChanged += MudouCanExecute;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;     CanExecute();&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; MudouCanExecute(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;     CanExecute();&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; CanExecute()&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (CommandObject != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt;  19:&lt;/span&gt;         botao.IsEnabled = CommandObject.CanExecute(&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt;  20:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;ul&gt;
      &lt;li&gt;Preencha o Item do BindingListener no método AttachedTo &lt;/li&gt;

      &lt;li&gt;Preencha o Binding do BindingListener no set da propriedade Command &lt;/li&gt;

      &lt;li&gt;Preencha o get da propriedade CommandObject returnando o Command do Listener &lt;/li&gt;

      &lt;li&gt;Programe o Click para disparar a execução do Command &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Veja como fica o código final do behavior :&lt;/p&gt;

    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
      &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; CommandBehavior : Behavior&amp;lt;Button&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     Button botao;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Binding _Command;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; BindingListener listener;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; CommandBehavior()&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;         listener = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BindingListener(MudouBinding);&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; MudouBinding(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, BindingChangedEventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;         CommandObject.CanExecuteChanged += MudouCanExecute;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;         CanExecute();&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; MudouCanExecute(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt;  19:&lt;/span&gt;         CanExecute();&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt;  20:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt;  21:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; CanExecute()&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt;  22:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt;  23:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (CommandObject != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum24"&gt;  24:&lt;/span&gt;             botao.IsEnabled = CommandObject.CanExecute(&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum25"&gt;  25:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum26"&gt;  26:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum27"&gt;  27:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Binding Command&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum28"&gt;  28:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum29"&gt;  29:&lt;/span&gt;         get&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum30"&gt;  30:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum31"&gt;  31:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _Command;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum32"&gt;  32:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum33"&gt;  33:&lt;/span&gt;         set&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum34"&gt;  34:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum35"&gt;  35:&lt;/span&gt;             _Command = &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum36"&gt;  36:&lt;/span&gt;             listener.Binding = _Command;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum37"&gt;  37:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum38"&gt;  38:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum39"&gt;  39:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum40"&gt;  40:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; ICommand CommandObject&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum41"&gt;  41:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum42"&gt;  42:&lt;/span&gt;         get&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum43"&gt;  43:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum44"&gt;  44:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; (ICommand)listener.Value;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum45"&gt;  45:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum46"&gt;  46:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum47"&gt;  47:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum48"&gt;  48:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; clicou(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum49"&gt;  49:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum50"&gt;  50:&lt;/span&gt;         CommandObject.Execute(&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum51"&gt;  51:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum52"&gt;  52:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum53"&gt;  53:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnAttached()&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum54"&gt;  54:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum55"&gt;  55:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;base&lt;/span&gt;.OnAttached();&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum56"&gt;  56:&lt;/span&gt;         botao = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.AssociatedObject;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum57"&gt;  57:&lt;/span&gt;         botao.Click += clicou;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum58"&gt;  58:&lt;/span&gt;         listener.Element = botao;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum59"&gt;  59:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum60"&gt;  60:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;&lt;strong&gt;Parte 6 : Utilizar o Behavior&lt;/strong&gt;&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;Uma vez pronto, utilizar o Behavior é a parte fácil.&lt;/p&gt;

    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
      &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Button&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Content&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Clique-me&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;button1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;i:Interaction.Behaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;bh:CommandBehavior&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Command&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;{Binding CriarGrupoCommand}&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;i:Interaction.Behaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Button&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;&lt;strong&gt;Concluindo&lt;/strong&gt;&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;Vimos como resolver, da forma mais simples possível, o problema de bindings no Windows Phone, passando a poder implementar MVVM no Wndows Phone.&lt;/p&gt;

    &lt;p&gt;Lembre-se que a classe BindingListener já faz parte do Prism, portanto chega-se a mesma solução usando o Prism.&lt;/p&gt;

    &lt;p&gt;Baixe aqui as classes&amp;#160; &lt;a href="http://www.bufaloinfo.com.br/download/BindingListenerBehavior.zip" target="_blank"&gt;BindingListener e CommandBehavior&lt;/a&gt;&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-5526333359739873633?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/VnLRX3sviL8/mvvm-no-windows-phone-7-e-o-command.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-0ZQTDrLIejQ/Ti-UDIc1gaI/AAAAAAAAGRU/9l-OMAFdiN4/s72-c/microsoft_silverlight_c_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/07/mvvm-no-windows-phone-7-e-o-command.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-6100821231091649421</guid><pubDate>Tue, 26 Jul 2011 05:07:00 +0000</pubDate><atom:updated>2011-07-26T02:08:00.018-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>Criando um Behavior no Silverlight</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-iBrxALDa8Mc/Ti5LpqN-lsI/AAAAAAAAGRE/9YZh9w41RmQ/s1600-h/microsoft_silverlight_c2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="microsoft_silverlight_c" border="0" alt="microsoft_silverlight_c" align="right" src="http://lh4.ggpht.com/-CGp0Wdd2Pfg/Ti5Lq9euniI/AAAAAAAAGRI/bRmv8P29r7U/microsoft_silverlight_c_thumb.jpg?imgmax=800" width="215" height="240" /&gt;&lt;/a&gt;Mostrei anteriormente como &lt;a href="http://cidadaocarioca.blogspot.com/2011/07/automatizando-o-updatesourcetrigger.html" target="_blank"&gt;criar uma property extension no silverlight&lt;/a&gt; para resolver o problema do binding com a textbox. Vamos neste novo post solucionar o mesmo problema, só que desta vez com um behavior ao invés de uma property extension.&lt;/p&gt;  &lt;p&gt;Este é o 3o de uma sequencia de 3 posts, veja os dois anteriores :&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://cidadaocarioca.blogspot.com/2011/06/binding-com-textbox.html" target="_blank"&gt;Binding com TextBox&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://cidadaocarioca.blogspot.com/2011/07/automatizando-o-updatesourcetrigger.html" target="_blank"&gt;Automatizando o UpdateSourceTrigger&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Vejamos os passos para criar o Behavior. Partindo de um projeto &lt;a title="Silverlight" href="http://www.microsoft.com/silverlight/" target="_blank"&gt;Silverlight&lt;/a&gt; :&lt;/p&gt;  &lt;blockquote&gt;   &lt;ul&gt;     &lt;li&gt;Faça uma referência para System.Windows.Interactivity &lt;/li&gt;      &lt;li&gt;Adicione uma nova classe chamada UpdateSourceBehavior &lt;/li&gt;      &lt;li&gt;Adicione um using para System.Windows.Interactivity &lt;/li&gt;      &lt;li&gt;Altere a classe para que herde de Behavior&amp;lt;TextBox&amp;gt; &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;A especificação de “TextBox” indica o objeto no qual esse behavior poderá ser aplicado.&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Crie uma variável privada chamada txt, do tipo TextBox &lt;/li&gt;   &lt;/ul&gt;    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;     &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;       &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; UpdateSourceBehavior : Behavior&amp;lt;TextBox&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     TextBox txt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;ul&gt;
    &lt;li&gt;Faça um override no método OnAttached, capture a textbox e o evento TextChanged &lt;/li&gt;
  &lt;/ul&gt;

  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
    &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnAttached()&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;base&lt;/span&gt;.OnAttached();&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     txt = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.AssociatedObject;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     txt.TextChanged += mudou;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;ul&gt;
    &lt;li&gt;Programe o método “mudou” para fazer o UpdateSource da propriedade Text &lt;/li&gt;
  &lt;/ul&gt;

  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
    &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; mudou(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, TextChangedEventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     txt.GetBindingExpression(TextBox.TextProperty).UpdateSource();&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;ul&gt;
    &lt;li&gt;No XAML adicione o namespace System.Windows.Interactivity e o namespace da classe UpdateSourceBehavior &lt;/li&gt;

    &lt;li&gt;Altere a tag da textbox para que fique como abaixo. &lt;/li&gt;
  &lt;/ul&gt;

  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
    &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TextBox&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;txtURL&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;{Binding Path=Url, Mode=TwoWay}&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;i:Interaction.Behaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;bh:UpdateSource&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;i:Interaction.Behaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;TextBox&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;O Behavior é mais simples de aplicar do que a extension property, especialmente porque pode ser aplicado através do &lt;a href="http://www.microsoft.com/expression/products/Overview.aspx?key=blend" target="_blank"&gt;Expression Blend&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-6100821231091649421?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/bC_YZ9QTMyg/criando-um-behavior-no-silverlight.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-CGp0Wdd2Pfg/Ti5Lq9euniI/AAAAAAAAGRI/bRmv8P29r7U/s72-c/microsoft_silverlight_c_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/07/criando-um-behavior-no-silverlight.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-6770302432093974028</guid><pubDate>Thu, 21 Jul 2011 10:11:00 +0000</pubDate><atom:updated>2011-07-21T07:11:10.419-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQLServer</category><title>SQL Server error 15372 : Failed to generate a user instance</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-PE5HP0ukXUI/Tif7JJMd7JI/AAAAAAAAGQU/VwJ48VDkFzU/s1600-h/SQL2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SQL" border="0" alt="SQL" align="right" src="http://lh5.ggpht.com/-trana3Slrdc/Tif7O5zqyXI/AAAAAAAAGQY/_Dlo8DYpeEE/SQL_thumb.jpg?imgmax=800" width="186" height="244" /&gt;&lt;/a&gt;Já peguei este erro ocorrendo diversas vezes com o SQL Express. O &lt;a title="SQL Server 2008" href="http://www.microsoft.com/sql/2008/default.mspx" target="_blank"&gt;SQL Server&lt;/a&gt; não consegue gerar a instância de servidor e a aplicação não roda. A mensagem detalhada com código aparece apenas no Event Viewer.&lt;/p&gt;  &lt;p&gt;A solução, apesar de não muito clara, é mais simples do que parece : Basta eliminar os arquivos contidos na pasta gerada pela user instance do SQL Express.&lt;/p&gt;  &lt;p&gt;O caminho da pasta : &lt;strong&gt;c:\user\&amp;lt;usuario&amp;gt;\appdata\Local\Microsoft\Microsoft SQL Server Data&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Apague todo o conteúdo desta pasta e o sql server express volta a funcionar.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-6770302432093974028?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/ePluN2dgdtY/sql-server-error-15372-failed-to.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-trana3Slrdc/Tif7O5zqyXI/AAAAAAAAGQY/_Dlo8DYpeEE/s72-c/SQL_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/07/sql-server-error-15372-failed-to.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-7112585276075977271</guid><pubDate>Tue, 19 Jul 2011 04:00:00 +0000</pubDate><atom:updated>2011-07-19T01:00:04.305-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>Automatizando o UpdateSourceTrigger</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-EvOBQ-odTL8/TiUBNkTRIzI/AAAAAAAAGQM/5tQPMADgpb4/s1600-h/Microsoft_Silverlight2.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Microsoft_Silverlight" border="0" alt="Microsoft_Silverlight" align="right" src="http://lh6.ggpht.com/-A1XTR68Llhk/TiUBOw-BtQI/AAAAAAAAGQQ/0RKTrPLEOUc/Microsoft_Silverlight_thumb.jpg?imgmax=800" width="136" height="151" /&gt;&lt;/a&gt;Vimos anteriormente como resolver o binding da textbox usando o UpdateSourceTrigger. Porém ter que programar isso para várias textbox pode ser um trabalho desagradável, além de ser uma codificação que precisa ficar na interface, dificultando o trabalho do designer.&lt;/p&gt;  &lt;p&gt;Então vamos ver formas de automatizar a aplicação do UpdateSourceTrigger. Além disso todos os casos que veremos podem ter utilidades bem mais amplas.&lt;/p&gt;  &lt;h2&gt;Extensions&lt;/h2&gt;  &lt;p&gt;O Silverlight (e também o WPF) nos permite criar extensões para os controles. Assim sendo podemos criar para os controles existentes novos atributos que podem inclusive alterar as funcionalidades existentes.&lt;/p&gt;  &lt;p&gt;Uma extensão é basicamente uma &lt;strong&gt;Dependency Property&lt;/strong&gt;. As dependency properties podem ser, ao invés de simplesmente “registradas”, “anexadas” a um objeto. &lt;/p&gt;  &lt;p&gt;Em nosso exemplo, no momento em que a atribuição da propriedade é disparada, podemos interceptar o evento TextChanged para causar o disparo do método UpdateSource no momento correto.&lt;/p&gt;  &lt;p&gt;Vamos partir do mesmo exemplo anterior para montar nossa extensão. Passo-a-Passo :&lt;/p&gt; &lt;span id="fullpost"&gt;   &lt;p&gt;(continuando a partir do exemplo anterior)&lt;/p&gt;    &lt;p&gt;1) Elimine o código do TextChanged&lt;/p&gt;    &lt;p&gt;2) Adicione uma nova Silverlight Class Library na solução, com o nome de prjExtensao&lt;/p&gt;    &lt;p&gt;3) Adicione uma classe chamada Extensao&lt;/p&gt;    &lt;p&gt;4) Na classe Extensao, &lt;strong&gt;crie a Dependency Property&lt;/strong&gt; utilizando o código abaixo :&lt;/p&gt;    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;     &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;       &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; DependencyProperty TextChangeUpdateSourceTriggerProperty =&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     DependencyProperty.RegisterAttached(&lt;span style="color: #006080"&gt;&amp;quot;TextChangeUpdateSourceTrigger&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;), &lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(Extensao),&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PropertyMetadata((&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;)&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PropertyChangedCallback(mudou)));&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;blockquote&gt;
    &lt;p&gt;Vamos analisar cada trecho deste código : &lt;/p&gt;

    &lt;p&gt;A) A Dependency Property ficará “guardada” em um atributo estático chamado &lt;strong&gt;TextChangeUpdateSourceTriggerProperty&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;B) Nunca instanciamos uma Dependency Property, a instância é gerada pelo método Register ou, neste caso, RegisterAttached, que indica que esta propriedade será aplicada em outros controles (qualquer outro controle).&lt;/p&gt;

    &lt;p&gt;C) O primeiro parâmetro do &lt;strong&gt;RegisterAttached&lt;/strong&gt;, “TextChangeUpdateSourceTrigger” é o nome da Dependency Property.&lt;/p&gt;

    &lt;p&gt;D) O 2o parâmetro, &lt;strong&gt;typeof(bool)&lt;/strong&gt;, é o tipo da propriedade, boolean.&lt;/p&gt;

    &lt;p&gt;E) O 3o parâmetro, &lt;strong&gt;typeof(Extensao)&lt;/strong&gt;, é a classe em que a propriedade está contida&lt;/p&gt;

    &lt;p&gt;F) O último parâmetro é uma instância da classe &lt;strong&gt;PropertyMetadata&lt;/strong&gt;, que nos auxilia a definir mais algumas características da propriedade.&lt;/p&gt;

    &lt;p&gt;G) O primeiro parâmetro da PropertyMetadata é o valor default da propriedade, false.&lt;/p&gt;

    &lt;p&gt;H) O 2o parâmetro da PropertyMetadata é um callBack que será chamado quando a propriedade receber o seu valor. É neste método – &lt;strong&gt;mudou&lt;/strong&gt; – que começaremos a programar a lógica que desejamos.&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;5) Crie o get/set da propriedade conforme o código abaixo :&lt;/p&gt;

  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
    &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; GetTextChangeUpdateSourceTrigger(DependencyObject d)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;)d.GetValue(TextChangeUpdateSourceTriggerProperty);&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; SetTextChangeUpdateSourceTrigger(DependencyObject d, &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     d.SetValue(TextChangeUpdateSourceTriggerProperty, &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;p&gt;Como pode-se observar pelo código acima, o get/set de uma dependency property é bem diferente de uma propriedade tradicional.&lt;/p&gt;

  &lt;p&gt;6) Programar o método “mudou” conforme o código abaixo :&lt;/p&gt;

  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
    &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; mudou(DependencyObject d, DependencyPropertyChangedEventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     TextBox textBox = d &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; TextBox;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (textBox == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; novoValor = &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;)d.GetValue(TextChangeUpdateSourceTriggerProperty);&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (NovoValor)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;         textBox.KeyUp += OnTextChanged;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;         textBox.KeyUp -= OnTextChanged;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt; } &lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;blockquote&gt;
    &lt;p&gt;A) É necessário garantir que a propriedade foi aplicada no tipo de objeto que esperamos. Se esperamos uma textbox mas a propriedade é aplicada em um botão, todo o código dará errado.&lt;/p&gt;

    &lt;p&gt;B) Recuperamos o valor atribuido a propriedade.&lt;/p&gt;

    &lt;p&gt;C) Processamos o valor. Em nosso caso, se true capturamos evento KeyUp, se false retiramos nosso tratador de evento do KeyUp&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;7) Programe o OnTextChange conforme abaixo :&lt;/p&gt;

  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
    &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnTextChanged(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, KeyEventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((e.Key == Key.Tab) || (e.Key == Key.Enter))&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     TextBox textBox = sender &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; TextBox;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     var binding = textBox.GetBindingExpression(TextBox.TextProperty);&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (binding!=&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;         binding.UpdateSource();&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;blockquote&gt;
    &lt;p&gt;A) Se a tecla for ENTER ou TAB, não processamos, pois o foco será mudado e o resultado não é adequado.&lt;/p&gt;

    &lt;p&gt;B) Recuperamos a textBox&lt;/p&gt;

    &lt;p&gt;C) Recuperamos a BindingExpression da propriedade Text&lt;/p&gt;

    &lt;p&gt;D) Existindo a BindingExpression, chamamos o UpdateSource&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;8) No projeto Silverlight, adicionamos uma referência para a Silverlight Class Library&lt;/p&gt;

  &lt;p&gt;9) No XAML adicione uma referência ao namespace prjExtensao :&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;&lt;em&gt;xmlns:ex=&amp;quot;clr-namespace:prjExtensao;assembly=prjExtensao&amp;quot;&lt;/em&gt;&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;10) Adicione o novo atributo na textbox :&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;&lt;em&gt;ex:Extensao.TextChangeUpdateSourceTrigger=&amp;quot;True&amp;quot;&lt;/em&gt;&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;11) Teste a aplicação. A textbox fará atualização do label a cada tecla, exatamente como estava com o código do TextChanged.&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;Resultado :&lt;/strong&gt; Criamos uma alteração no comportamento da textbox que pode ser aplicada em qualquer textbox com o uso de um simples atributo. Isso facilita o trabalho de designers, evitando codificação na interface.&lt;/p&gt;
&lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-7112585276075977271?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/6fvc38kUIto/automatizando-o-updatesourcetrigger.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-A1XTR68Llhk/TiUBOw-BtQI/AAAAAAAAGQQ/0RKTrPLEOUc/s72-c/Microsoft_Silverlight_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/07/automatizando-o-updatesourcetrigger.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-6369737836711517849</guid><pubDate>Thu, 14 Jul 2011 14:13:00 +0000</pubDate><atom:updated>2011-07-14T11:13:47.987-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><title>Training Kits Microsoft</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;A Microsoft tem o habito de disponibilizar training kits, pacotes que envolvem aplicações de exemplo para o estudo das mais diversas tecnologias.&lt;/p&gt;  &lt;p&gt;Eis abaixo uma lista de Training Kits disponibilizados pela Microsoft para o estudo de tecnologias de desenvolvimento :&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Visual Studio 2010 and .NET 4 Training Kit &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=23507"&gt;http://www.microsoft.com/download/en/details.aspx?id=23507&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Windows Azure Training Kit &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=8396"&gt;http://www.microsoft.com/download/en/details.aspx?id=8396&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;SQL Server 2008 R2 for Developers Training Kit &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=16281"&gt;http://www.microsoft.com/download/en/details.aspx?id=16281&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Silverlight 4 Training Kit &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=10409"&gt;http://www.microsoft.com/download/en/details.aspx?id=10409&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;LightSwitch Beta 2 Training Kit &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=23746"&gt;http://www.microsoft.com/download/en/details.aspx?id=23746&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;WCF and WF Samples for .NET Framework 4 &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=21459"&gt;http://www.microsoft.com/download/en/details.aspx?id=21459&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Windows 7 Training Kit for Developers &lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=6450"&gt;http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=6450&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;PHP on Windows and SQL Server Training Kit: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c8498c9b-a85a-4afa-90c0-593d0e4850cb"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c8498c9b-a85a-4afa-90c0-593d0e4850cb&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Identity Developer Training Kit: &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=C3E315FA-94E2-4028-99CB-904369F177C0&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=C3E315FA-94E2-4028-99CB-904369F177C0&amp;amp;displaylang=en&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Office 2010 Developer Training Kit: &lt;a href="http://www.microsoft.com/download/en/details.aspx?displayLang=en&amp;amp;id=23519"&gt;http://www.microsoft.com/download/en/details.aspx?displayLang=en&amp;amp;id=23519&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;SharePoint 2010 Developer Training Kit: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bfd1603b-7550-4b8e-be85-4215a5069b90"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=bfd1603b-7550-4b8e-be85-4215a5069b90&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=24cea29e-042e-41c9-aa16-684a0ca5f5db"&gt;&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&amp;amp;FamilyID=fffaad6a-0153-4d41-b289-a3ed1d637c0d"&gt;&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Windows Server 2008 R2 Developer Training Kit: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c48b3eb4-ad4b-461c-9d5a-25f45d949b92&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=c48b3eb4-ad4b-461c-9d5a-25f45d949b92&amp;amp;displaylang=en&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=1C333F06-FADB-4D93-9C80-402621C600E7&amp;amp;displaylang=en"&gt;&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Windows Phone 7 Training Kit for Developers: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ca23285f-bab8-47fa-b364-11553e076a9a"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ca23285f-bab8-47fa-b364-11553e076a9a&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Windows Mobile 6.5 Developer Tool Kit: &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=20686A1D-97A8-4F80-BC6A-AE010E085A6E&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=20686A1D-97A8-4F80-BC6A-AE010E085A6E&amp;amp;displaylang=en&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Windows Azure Training Kit: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?familyid=413e88f8-5966-4a83-b309-53b7b77edf78"&gt;http://www.microsoft.com/downloads/en/details.aspx?familyid=413e88f8-5966-4a83-b309-53b7b77edf78&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;SharePoint 2010 and Silverlight 4 Training Kit: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ada43555-f785-4553-b5c7-6c17a499a6e0"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ada43555-f785-4553-b5c7-6c17a499a6e0&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ac1d8eb5-ac8e-45d5-b1e3-efb8e4e3ebd1"&gt;&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;BizTalk 2010 Training Kit: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=38c2ccfc-510c-4627-a33c-95e9d19f3478"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=38c2ccfc-510c-4627-a33c-95e9d19f3478&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Windows Server AppFabric Training Kit: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=7290f7ed-e86b-4114-a452-4f07fa32403d"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=7290f7ed-e86b-4114-a452-4f07fa32403d&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Web Camps Training Kits: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=0a906559-28bd-4f5d-ac18-f895a200a2a5"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=0a906559-28bd-4f5d-ac18-f895a200a2a5&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Office 365 Developer Training Kit: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=E731BF34-FF5C-444E-9AD8-962D804B4D6A&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=E731BF34-FF5C-444E-9AD8-962D804B4D6A&amp;amp;displaylang=en&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Windows Phone codenamed &amp;quot;Mango&amp;quot; Training Course: &lt;a href="http://msdn.microsoft.com/en-us/WP7MangoTrainingCourse"&gt;http://msdn.microsoft.com/en-us/WP7MangoTrainingCourse&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Dynamics CRM 2011 Developer Training Kit: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=78498c29-28ac-440b-9c20-ec5da6ee6e98&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=78498c29-28ac-440b-9c20-ec5da6ee6e98&amp;amp;displaylang=en&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;SharePoint and Windows Azure Development Kit: &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=24398&amp;quot;"&gt;http://www.microsoft.com/download/en/details.aspx?id=24398&lt;img src="http://i.ixnp.com/images/v6.59/t.gif" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Esqueci de algum ? &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-6369737836711517849?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/V6cRfQFPCAA/training-kits-microsoft.html</link><author>noreply@blogger.com (Dennes)</author><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/07/training-kits-microsoft.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-7836756519781730561</guid><pubDate>Wed, 13 Jul 2011 10:28:00 +0000</pubDate><atom:updated>2011-07-13T07:28:04.772-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MVC</category><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><title>Video Dicas BufaloInfo–No 1</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Estou inaugurando um &lt;a href="http://www.youtube.com/user/dennesoliveira"&gt;canal no YouTube&lt;/a&gt; dedicado a vídeos com dicas técnicas, o canal será chamado de Video Dicas &lt;a title="BufaloInfo" href="http://www.bufaloinfo.com.br" target="_blank"&gt;BufaloInfo&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;A primeira dica, cujo vídeo está abaixo, é sobre a WebGrid do ASP.NET MVC e mostra ainda um pouco do uso do JQuery com ASP.NET MVC.&lt;/p&gt;  &lt;p&gt;Comentários, opiniões, sugestões, dúvidas, pedido de novos assuntos, tudo é bem vindo, use os comentários.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:67c93a0d-d79c-4352-b891-1753d13308ba" class="wlWriterEditableSmartContent"&gt;&lt;div id="c1eeb2d3-d98a-4d81-bc86-c5eadee33fe7" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=eDo5vmsC4vw&amp;amp;feature=channel_video_title" target="_new"&gt;&lt;img src="http://lh4.ggpht.com/-eOYNVbxc_9U/Th1zMl3Y7iI/AAAAAAAAGP0/2LIaKsWkeTM/videoc0cc8537b046%25255B2%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('c1eeb2d3-d98a-4d81-bc86-c5eadee33fe7'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;520\&amp;quot; height=\&amp;quot;292\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/eDo5vmsC4vw?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/eDo5vmsC4vw?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;520\&amp;quot; height=\&amp;quot;292\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-7836756519781730561?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/K9Birvb2LyY/video-dicas-bufaloinfono-1.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-eOYNVbxc_9U/Th1zMl3Y7iI/AAAAAAAAGP0/2LIaKsWkeTM/s72-c/videoc0cc8537b046%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/07/video-dicas-bufaloinfono-1.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-8463156454500683109</guid><pubDate>Wed, 13 Jul 2011 07:35:00 +0000</pubDate><atom:updated>2011-07-13T04:35:13.822-03:00</atom:updated><title>Fixando Titulo e Colunas de uma GridView</title><description>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/-9gMnLLT-hpA/Th1Ken40JMI/AAAAAAAAGCQ/bN-KzQopjWw/s1600-h/jquery-logo2.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="jquery-logo" border="0" alt="jquery-logo" align="right" src="http://lh4.ggpht.com/-lB5KzoSP-wI/Th1KfzoXMyI/AAAAAAAAGCU/xJc3S_RkP6o/jquery-logo_thumb.png?imgmax=800" width="196" height="67" /&gt;&lt;/a&gt;Inspirado por uma pergunta que encontrei no MSDN Brasil, resolvi pesquisar mais sobre o assunto, achei até mesmo que fosse simples, pois tinha certeza de já ter escrito sobre isso anteriormente.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Resumindo :&lt;/strong&gt; O objetivo é que em uma gridview com muito conteúdo em colunas e linhas possa ser utilizada uma barra de rolagem para visualizar o conteúdo, porém o título e algumas colunas iniciais possam ficar fixas durante a rolagem.&lt;/p&gt;  &lt;p&gt;Realmente sobre isso antes escrevi : Podem ver &lt;a href="http://www.bufaloinfo.com.br/dicas.aspx?cod=869"&gt;uma dica aqui&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;O problema é que essa dica, amplamente divulgada por toda a web, só funciona até o &lt;a href="http://www.microsoft.com/windows/internet-explorer/beta/default.aspx" target="_blank"&gt;IE&lt;/a&gt; 7.0, outros browsers esta dica não funciona.&lt;/p&gt;  &lt;p&gt;Já inspirado, resolvi solucionar o problema com &lt;a href="http://jquery.com/" target="_blank"&gt;JQuery&lt;/a&gt;. A solução não ficou tão simples, mas graças ao JQuery isso é fácil de resolver : Criei um um plugIn para o JQuery, facilitando assim a aplicação desta solução.&lt;/p&gt;  &lt;h2&gt;Passo a Passo&lt;/h2&gt; &lt;span id="fullpost"&gt;   &lt;blockquote&gt;     &lt;ul&gt;       &lt;li&gt;Crie uma nova &lt;a href="http://www.bufaloinfo.com.br/cursos/aspnet2.asp" target="_blank"&gt;ASP.NET&lt;/a&gt; Empty Web Application &lt;/li&gt;        &lt;li&gt;Adicione um webform &lt;/li&gt;        &lt;li&gt;Adicione um sqlDataSource no WebForm com a seguinte query : SELECT [CustomerID], [CompanyName], [ContactName], [Address], [City], [Country] FROM [Customers] &lt;/li&gt;        &lt;li&gt;Adicione uma gridView com edição, exclusão e ordenação, mas sem paginação &lt;/li&gt;        &lt;li&gt;No page_load, acrescente o código abaixo para gerar o THEAD e o TBODY – o plugIn foi criado para funcionar com estas tags          &lt;blockquote&gt;Saiba mais sobre essas tags em &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=722178718388262359"&gt;TBODY, THEAD : JQuery e a Gridview&lt;/a&gt; e &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=7844831150146307742"&gt;Melhorando a GridView : CoolGrid no CodePlex&lt;/a&gt; &lt;/blockquote&gt;       &lt;/li&gt;        &lt;li&gt;Configure a propriedade clientIDMode da GridView para Static &lt;/li&gt;     &lt;/ul&gt;      &lt;blockquote&gt;       &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-jOTz0GVuXaw/Th1KhxuukuI/AAAAAAAAGCY/X5tADctOb8w/s1600-h/SNAG-00283.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAG-0028" border="0" alt="SNAG-0028" src="http://lh3.ggpht.com/-VwhD31NmMIE/Th1KjVyQpeI/AAAAAAAAGCc/5Et-Y7Vl6uA/SNAG-0028_thumb1.jpg?imgmax=800" width="285" height="253" /&gt;&lt;/a&gt;&lt;/p&gt;     &lt;/blockquote&gt;      &lt;blockquote&gt;Com essa configuração garantimos que a tag gerada pela gridview no client terá o mesmo ID que a GridView, facilitando a programação client &lt;/blockquote&gt;      &lt;ul&gt;       &lt;li&gt;No source, em volta da GridView, adicione uma DIV de forma a limitar o espaço ocupado pela gridview, da seguinte forma : &lt;/li&gt;     &lt;/ul&gt;      &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;       &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;         &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;height:200px;width:500px;overflow:auto&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;divtabela&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;gridview&lt;/span&gt; ... &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;ul&gt;
      &lt;li&gt;Teste a aplicação e observe a gridview com barras de rolagem &lt;/li&gt;
    &lt;/ul&gt;

    &lt;blockquote&gt;
      &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-2ZQorjIfuvE/Th1KlezsnNI/AAAAAAAAGCg/UtAD54eNfCE/s1600-h/SNAG-00304.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAG-0030" border="0" alt="SNAG-0030" src="http://lh5.ggpht.com/-D2X0MjZM6Ew/Th1KnY262YI/AAAAAAAAGCk/Q6p_wq5c9-I/SNAG-0030_thumb2.jpg?imgmax=800" width="403" height="170" /&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;ul&gt;
      &lt;li&gt;Crie uma pasta Scripts no projeto &lt;/li&gt;

      &lt;li&gt;Acrescente no projeto os scripts do JQuery &lt;/li&gt;

      &lt;li&gt;Acrescente no projeto o script do fixGrid, o plugIn criado (pegue-o em &lt;a title="http://fixgrid.codeplex.com/" href="http://fixgrid.codeplex.com/"&gt;http://fixgrid.codeplex.com/&lt;/a&gt;) &lt;/li&gt;

      &lt;li&gt;Acrescente no webForm o script do JQuery e o script do PlugIn. O código no HEAD da página fica da seguinte forma : &lt;/li&gt;
    &lt;/ul&gt;

    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
      &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Scripts/jquery-1.4.1.js&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &amp;lt;script src=&lt;span style="color: #006080"&gt;&amp;quot;Scripts/fixGrid.js&amp;quot;&lt;/span&gt; type=&lt;span style="color: #006080"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;ul&gt;
      &lt;li&gt;Programe em JQuery a colocação do título e colunas fixas na GridView, veja como fica : &lt;/li&gt;
    &lt;/ul&gt;

    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
      &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &amp;lt;script language=&lt;span style="color: #006080"&gt;&amp;quot;javascript&amp;quot;&lt;/span&gt; type=&lt;span style="color: #006080"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     $(&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; () {&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;         $(&lt;span style="color: #006080"&gt;&amp;quot;#GridView1&amp;quot;&lt;/span&gt;).fixarGrid(2);&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     })&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; &amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;ul&gt;
      &lt;li&gt;Teste a página para verificar o resultado &lt;/li&gt;
    &lt;/ul&gt;

    &lt;blockquote&gt;
      &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-MO1jzBGKHv4/Th1KppQK6NI/AAAAAAAAGCo/cNHXCre9RF0/s1600-h/SNAG-00293.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAG-0029" border="0" alt="SNAG-0029" src="http://lh5.ggpht.com/-aOrh9hd2Y8U/Th1KrgQ13gI/AAAAAAAAGCs/VucwN2AA4u4/SNAG-0029_thumb1.jpg?imgmax=800" width="429" height="214" /&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/blockquote&gt;

  &lt;h2&gt;Código Fonte&lt;/h2&gt;

  &lt;blockquote&gt;
    &lt;p&gt;Sem dúvida o código fonte ainda pode ser bastante melhorado, exatamente por isso disponibilizei o projeto deste plugIn no CodePlex em &lt;a title="http://fixgrid.codeplex.com/" href="http://fixgrid.codeplex.com/"&gt;http://fixgrid.codeplex.com/&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Idéias e desenvolvedores são muito bem vindos para a melhoria deste plugin.&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-8463156454500683109?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/NxZFnRj5-XA/fixando-titulo-e-colunas-de-uma.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-lB5KzoSP-wI/Th1KfzoXMyI/AAAAAAAAGCU/xJc3S_RkP6o/s72-c/jquery-logo_thumb.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/07/fixando-titulo-e-colunas-de-uma.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-2999487371772124082</guid><pubDate>Mon, 11 Jul 2011 20:01:00 +0000</pubDate><atom:updated>2011-07-11T17:01:41.450-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQLServer</category><title>Solução : SQL Server não encontra objeto no Schema Default</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-tZryQvXG4OU/ThtWnQqikZI/AAAAAAAAEsM/kk0oZU1hPAI/s1600-h/SQL2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SQL" border="0" alt="SQL" align="right" src="http://lh4.ggpht.com/-0ZAlWFsk94k/ThtWoxq1FCI/AAAAAAAAEsQ/27PjfKPh0kg/SQL_thumb.jpg?imgmax=800" width="186" height="244" /&gt;&lt;/a&gt;O bom uso dos schemas é uma novidade do SQL Server 2005 em diante, se popularizando mais a partir do SQL Server 2008.&lt;/p&gt;  &lt;p&gt;É normal, portanto, que muitos desenvolvedores ainda não façam, ou não saibam fazer, um bom uso dos schemas. &lt;/p&gt;  &lt;p&gt;Com isso o problema exposto acima, apesar de ter uma explicação técnica simples, pode ainda pegar muitos desenvolvedores desprevinidos.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Problema :&lt;/strong&gt; Os objetos de banco encontram-se em um schema personalizado, não no schema dbo. Apesar do usuário da aplicação estar configurado usando o schema personalizado como default, os objetos não são encontrados. Logando-se no query analyzer com o mesmo usuário o problema também acontece, como se o schema default do usuário não fosse respeitado.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Motivo :&lt;/strong&gt; O atributo schema default não tem efeito para usuários com permissão de sysadmin. Isso, simples assim. Um sysadmin sempre terá como schema default o schema DBO.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Solução :&lt;/strong&gt; Para de usar usuários que pertençam a role sysadmin. Pode até usar usuários que sejam dbowner, mas sysadmin sempre terá esse problema&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;É muito interessante observar que essa característica do SQL Server leva os desenvolvedores a adotarem um comportamento mais adequado para aplicações reais : &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Parar de usar sysadmin como usuário da aplicação &lt;/li&gt;    &lt;li&gt;Passar a usar nomes de tabela qualificados com o schema na escrita SQL &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-2999487371772124082?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/uFRE_C7_EsQ/solucao-sql-server-nao-encontra-objeto.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-0ZAlWFsk94k/ThtWoxq1FCI/AAAAAAAAEsQ/27PjfKPh0kg/s72-c/SQL_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/07/solucao-sql-server-nao-encontra-objeto.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-2921041808010750910</guid><pubDate>Mon, 04 Jul 2011 17:06:00 +0000</pubDate><atom:updated>2011-07-04T14:06:58.987-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows 7</category><title>Cuidado com SDKs, Tools, Toolkits e afins</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Observei um padrão muito desagradável com alguns tipos de instalação, tais como esses que citei acima.&lt;/p&gt;  &lt;p&gt;Com as versões de cada ferramenta avançando em escala exponencial, é frequente termos que atualizar estas instalações. Nestas horas é comum que algo inesperado aconteça :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Se confiamos que a nova instalação vai se virar corretamente sobre a antiga, recebemos durante a instalação uma mensagem de falta de arquivos – mensagem estranha, pois parece estar procurando por um arquivo que pertence a própria instalação. &lt;/li&gt; &lt;/ul&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-mOOiQXiPlPM/ThHzHKR3XNI/AAAAAAAAC04/3fRXcEHthYw/s1600-h/SNAG-00594.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAG-0059" border="0" alt="SNAG-0059" src="http://lh5.ggpht.com/-jhjskyLtrnk/ThHzI0SYthI/AAAAAAAAC08/WpiM8fgNl6w/SNAG-0059_thumb2.jpg?imgmax=800" width="392" height="367" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Se tentamos fazer a desinstalação da versão mais antiga, a desinstalação falha, nos deixando sem ter para onde correr &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Veja a causa disso&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Essas instalações são baixadas em pacotes compactados, mas com a extensão .EXE &lt;/li&gt;    &lt;li&gt;A primeira coisa que ocorre durante a instalação é a descompactação destes pacotes em um diretório na raiz do C: que recebe como nome um GUID (Global Unique Identifier :&amp;#160; “c93308540a5c70e5cea8”) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-KYcxdY65RkE/ThHzKhEfL8I/AAAAAAAAC1A/tYjpqHjvI18/s1600-h/SNAG-00603.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="SNAG-0060" border="0" alt="SNAG-0060" src="http://lh6.ggpht.com/-aEUiHmByrhE/ThHzMQSDjvI/AAAAAAAAC1E/TgjUG0qF02I/SNAG-0060_thumb1.jpg?imgmax=800" width="315" height="335" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Neste diretório-GUID fica o real instalador, que é disparado e a instalação executada. &lt;/li&gt;    &lt;li&gt;&lt;em&gt;O caminho deste diretório-GUID é registrado no windows e será usado para chamar o desinstalador quando desejarmos&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;Nós olhamos o monte de diretórios-guid na raiz do C: com cara de paisagem e, acreditando serem restos, deletamos. Não farão falta, até tentarmos desinstalar… &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Exemplos&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Já peguei exatamente estes casos com atualização das tools do Silverlight e atualização do Zune.&lt;/p&gt;    &lt;p&gt;O principal sintoma é a reclamação de falta de arquivo, especialmente quando a instalação busca o arquivo em um diretório-GUID e nos deixa com cara de paisagem sem saber porque ela – a instalação – está procurando um arquivo que não existe.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Solução&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Ter muita paciência e experiência para excluir do registry chave da instalação do registro. Enquanto fazia isso com o Zune me lembrava dos conceitos que estudei nos treinamentos de WOSSA I e WOSSA II. Alguém ai lembra disso ? Eram ótimos treinamentos !&lt;/p&gt;    &lt;p&gt;Usar uma ferramenta para eliminar a força uma aplicação. Estou experimentando o Revo Uninstaller Pro, ainda muito desconfiado da eficácia.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Não estamos sós !&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Veja um desabafo sobre este tipo de problema : &lt;a title="http://geekswithblogs.net/go281/archive/2011/06/10/the-end-of-windows-as-we-know-it.aspx" href="http://geekswithblogs.net/go281/archive/2011/06/10/the-end-of-windows-as-we-know-it.aspx"&gt;http://geekswithblogs.net/go281/archive/2011/06/10/the-end-of-windows-as-we-know-it.aspx&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-2921041808010750910?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/sK-b1f-YV44/cuidado-com-sdks-tools-toolkits-e-afins.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-jhjskyLtrnk/ThHzI0SYthI/AAAAAAAAC08/WpiM8fgNl6w/s72-c/SNAG-0059_thumb2.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/07/cuidado-com-sdks-tools-toolkits-e-afins.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-3747960158525919688</guid><pubDate>Mon, 13 Jun 2011 06:44:00 +0000</pubDate><atom:updated>2011-06-13T03:44:31.321-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">WPF</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>Binding com TextBox</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-Xxyubqzuf7w/TfWxwMdOLuI/AAAAAAAACwQ/mtpiJXMB_nw/s1600-h/Microsoft_Silverlight2.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Microsoft_Silverlight" border="0" alt="Microsoft_Silverlight" align="right" src="http://lh3.ggpht.com/-d7I4AcCzOeQ/TfWxxOhdARI/AAAAAAAACwU/9BTlZK-RK04/Microsoft_Silverlight_thumb.jpg?imgmax=800" width="136" height="151" /&gt;&lt;/a&gt;A textbox possui uma característica especial em seu binding que apenas se torna mais perceptível quando utilizamos MVVM ou quando envolvemos a textbox em algum binding um pouco menos tradicional.&lt;/p&gt;  &lt;p&gt;Indo direto ao ponto : Quando o mode é twoway, a textbox apenas atualiza a origem do binding no evento lostfocus e não no evento change.&lt;/p&gt;  &lt;p&gt;Em muitos casos isso é um resultado agradável : evita um excesso de processamento a cada tecla pressionada na textbox.&lt;/p&gt;  &lt;p&gt;Porém existem algumas situações especiais, algumas validações, ativação e desativação de botões e outras em que nós gostaríamos que a interface reagisse a cada tecla pressionada. Como fazer ?&lt;/p&gt;  &lt;p&gt;Vamos primeiro reproduzir esse problema em uma Silverlight Application : &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1) Crie uma nova Silverlight Application&lt;/p&gt;    &lt;p&gt;2) Adicione uma textbox, um botão e um label&lt;/p&gt;    &lt;p&gt;3) Faça um binding na textbox entre a propriedade text e a propriedade content do label&lt;/p&gt;    &lt;p&gt;4) Teste a aplicação&lt;/p&gt; &lt;/blockquote&gt; &lt;span id="fullpost"&gt;   &lt;p&gt;&lt;strong&gt;Resultado :&lt;/strong&gt; Por mais que digite na textbox, o label apenas será atualizado depois que a textbox perder o foco e não de acordo com a digitação. A textbox só atualiza a origem do binding no lostfocus e não no change.&lt;/p&gt;    &lt;p&gt;Para resolver isso podemos utilizar o atributo &lt;strong&gt;UpdateSourceTrigger&lt;/strong&gt; do binding. O primo rico, WPF, possui mais opções no &lt;strong&gt;UpdateSourceTrigger&lt;/strong&gt;, dai que apenas esse atributo seria suficiente para resolver o problema.&lt;/p&gt;    &lt;p&gt;No Silverlight, porém, o máximo que podemos fazer é definir o UpdateSourceTrigger com Explicit. Com esta definição passa a ser nossa responsabilidade – e não mais da textbox – fazer uma atualização da origem do binding. Se não fizermos, o binding funcionará apenas como se fosse OneWay.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-3NuGvEZFiJY/TfWxx9_AqHI/AAAAAAAACwY/L0EdrFMNhgg/s1600-h/SNAG-0050%25255B3%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAG-0050" border="0" alt="SNAG-0050" src="http://lh6.ggpht.com/-6sYEZeyAxtk/TfWxy8Q5HXI/AAAAAAAACwc/cyI6DIJf4MI/SNAG-0050_thumb%25255B1%25255D.jpg?imgmax=800" width="497" height="279" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;A programação do evento TextChanged para atualizar a origem do binding fica da seguinte forma : &lt;/p&gt;    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;     &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;       &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; textBox1_TextChanged(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, TextChangedEventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     textBox1.GetBindingExpression(TextBox.TextProperty).UpdateSource();&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;p&gt;Vamos decifrar essa linha de código :&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;&lt;strong&gt;GetBindingExpression :&lt;/strong&gt; Método de todos os controles silverlight que nos permite recuperar uma expressão de Binding utilizada no objeto&lt;/p&gt;

    &lt;p&gt;&lt;strong&gt;TextBox.TextProperty :&lt;/strong&gt; Toda propriedade, para permitir a realização de Binding, é criada na forma de uma Dependency Property. O método GetBindingExpression pede como parâmetro esta Dependency Property, que sempre encontraremos como um elemento estático da classe do controle que estamos utilizando.&lt;/p&gt;

    &lt;p&gt;&lt;strong&gt;UpdateSource :&lt;/strong&gt; Método do objeto BindingExpression para atualizar a origem do binding quando este é TwoWay. Só tem utilidade para o caso do UpdateSourceTrigger=Explicit&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;Feito isso, teste novamente a aplicação e descobrirá que agora o label é atualizado &lt;/p&gt;
&lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-3747960158525919688?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/SOjKdVoie3c/binding-com-textbox.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-d7I4AcCzOeQ/TfWxxOhdARI/AAAAAAAACwU/9BTlZK-RK04/s72-c/Microsoft_Silverlight_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/06/binding-com-textbox.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-9596586518314382</guid><pubDate>Wed, 08 Jun 2011 08:37:00 +0000</pubDate><atom:updated>2011-06-08T05:37:58.400-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">WPF</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>Compilando e Mesclando Dictionaries</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Estilos, temas e outros recursos inseridos em resource dictionaries são recursos altamente reutilizáveis, em alguns casos desejaremos reutilizá-los até mesmo em outros projetos e para isso precisaremos compilar os resource dictionaries em class libraries (.dll) para podermos utiliza-las amplamente em outros projetos.&lt;/p&gt;  &lt;h2&gt;&lt;strong&gt;Compilar um Resource Dictionary&lt;/strong&gt;&lt;/h2&gt;  &lt;blockquote&gt;   &lt;p&gt;Essa sem dúvida é a parte fácil do trabalho :&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;1) Crie uma silverlight class library&lt;/p&gt;      &lt;p&gt;2) Adicione um resource dictionary. Pode ser na raiz do projeto ou pode criar pastas para organizar múltiplos dictionaries.&lt;/p&gt;      &lt;p&gt;3) Compile&lt;/p&gt;   &lt;/blockquote&gt; &lt;/blockquote&gt;  &lt;h2&gt;&lt;strong&gt;URI para diferentes Assemblies&lt;/strong&gt;&lt;/h2&gt; &lt;span id="fullpost"&gt;   &lt;blockquote&gt;     &lt;p&gt;Uma questão sobre dictionaries compilados é como fazer referência a eles a partir de nossa aplicação. Uma questão importante é o fato de que as URI’s que utilizamos no silverlight poderem fazer referência a elementos em outras DLL’s e não apenas dentro da DLL principal.&lt;/p&gt;      &lt;p&gt;Destaco essa questão da referência pois dictionaries compilados é apenas uma de suas utilidades. As URI’s permitem fazer referência a qualquer .xaml compilado em DLL diferente. Podemos, por exemplo, carregar uma página compilada em uma DLL diferente.&lt;/p&gt;      &lt;p&gt;A questão é : Como escrever uma URI para outra DLL ?&lt;/p&gt;      &lt;p align="center"&gt;&lt;strong&gt;/&amp;lt;assembly&amp;gt;;component/[&amp;lt;path&amp;gt;/]&amp;lt;arquivo&amp;gt;.xaml&lt;/strong&gt;&lt;/p&gt;      &lt;p&gt;Onde :&lt;/p&gt;      &lt;blockquote&gt;       &lt;p&gt;&lt;strong&gt;&amp;lt;assembly&amp;gt; :&lt;/strong&gt; O nome do assembly no qual encontra-se o resource dictionary, sem uso do “.DLL”. &lt;/p&gt;        &lt;p&gt;&lt;strong&gt;[&amp;lt;path&amp;gt;/] :&lt;/strong&gt; O caminho do arquivo .xaml em relação a raiz da class library. Em uma class library com vários dictionaries ou outros elementos, os dictionaries podem ser separados em multiplas pastas para melhor organização.&lt;/p&gt;        &lt;p&gt;&lt;strong&gt;&amp;lt;arquivo&amp;gt; :&lt;/strong&gt; Nome do arquivo do resource dictionary&lt;/p&gt;        &lt;p&gt;Importante observar que a palavra “component” é fixa.&lt;/p&gt;     &lt;/blockquote&gt;      &lt;p&gt;Exemplos :&lt;/p&gt;      &lt;blockquote&gt;       &lt;p&gt;/meuassembly;component/dictionary.xaml&lt;/p&gt;        &lt;p&gt;/meuassembly;component/dicionarios/dictionary.xaml&lt;/p&gt;     &lt;/blockquote&gt;   &lt;/blockquote&gt;    &lt;h2&gt;Mesclando Resource Dictionaries&lt;/h2&gt;    &lt;blockquote&gt;     &lt;p&gt;A mesclagem de dictionaries é a forma de utilizar os dictionaries compilados : Eles precisam ser mesclados com o application dictionary. &lt;/p&gt;      &lt;p&gt;Veja a síntaxe de mesclagem :&lt;/p&gt;      &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;       &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;         &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Application.Resources&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;        &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;            &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ResourceDictionary.MergedDictionaries&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ResourceDictionary&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Source&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;/MeuAssembly;component/Dictionaries/TextBox.xaml&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;                &lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ResourceDictionary.MergedDictionaries&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

        &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Application.Resources&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;p&gt;Parece simples, mas essa síntaxe possui algumas sutilezas muito interessantes. O principal é responder a duas questões :&lt;/p&gt;

    &lt;p&gt;A) Como mesclar vários dictionaries ?&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;Dentro do elemento ResourceDictionary.MergedDictionaries pode-se adicionar vários resource dictionaries, gerando a mesclagem&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;B) Como fazer a mesclagem em um application dictionary que possui outros elementos ?&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;A mesclagem não pode ser “simplesmente adicionada” junto a outros elementos do application dictionary. Existem duas possibilidades : pode-se adicionar os demais elementos dentro da tag resource dictionary, mas fora de MergedDictionaries; ou adicionar os elementos como um outro resource dictionary a ser mesclado.&lt;/p&gt;

      &lt;p&gt;Veja o local correto marcado no trecho abaixo :&lt;/p&gt;

      &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
        &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
          &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Application.Resources&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;        &lt;/pre&gt;
&lt;!--CRLF--&gt;

          &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;            &lt;/pre&gt;
&lt;!--CRLF--&gt;

          &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ResourceDictionary.MergedDictionaries&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

          &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ResourceDictionary&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Source&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;/slUtils;component/Dictionaries/TextBox.xaml&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

          &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

          &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;         &lt;font style="background-color: #00ff00" color="#333333"&gt;Local Correto&lt;/font&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

          &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;                &lt;/pre&gt;
&lt;!--CRLF--&gt;

          &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ResourceDictionary.MergedDictionaries&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

          &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;     &lt;font style="background-color: #00ff00"&gt;Local Correto&lt;/font&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

          &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

          &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;     &lt;font style="background-color: #ff0000"&gt;Local Errado&lt;/font&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

          &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Application.Resources&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/blockquote&gt;
  &lt;/blockquote&gt;
&lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-9596586518314382?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/6BjomvnFrI0/compilando-e-mesclando-dictionaries.html</link><author>noreply@blogger.com (Dennes)</author><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/06/compilando-e-mesclando-dictionaries.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-5864595765097446388</guid><pubDate>Tue, 07 Jun 2011 15:11:00 +0000</pubDate><atom:updated>2011-06-07T12:11:57.668-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">WPF</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>BackGround Value Converter</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-JcmzAsIWyLY/Te49Lr11s6I/AAAAAAAACwE/dgX20MvkEUc/s1600-h/Microsoft_Silverlight2.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Microsoft_Silverlight" border="0" alt="Microsoft_Silverlight" align="right" src="http://lh6.ggpht.com/-O8oCW16KOHs/Te4_p32EKYI/AAAAAAAACwM/ca_IUozNaGc/Microsoft_Silverlight_thumb.jpg?imgmax=800" width="136" height="151" /&gt;&lt;/a&gt;Vejamos mais um exemplo de value converter para deixar mais clara a versatilidade deste recurso.&lt;/p&gt;  &lt;p&gt;Em relação ao background, a idéia é ter um value converter que transforme um valor numérico em uma cor de acordo com uma regra de negócio específica, permitindo que valores possam ser destacados em meio a interface.&lt;/p&gt;  &lt;p&gt;Menos reutilizável que &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=8781626267604267737" target="_blank"&gt;o anterior&lt;/a&gt;, o exemplo desde value converter mostra a versatilidade desta classe na implementação de regras da interface.&lt;/p&gt;  &lt;p&gt;Veja como fica o código :&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; FundoValueConverter : IValueConverter&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: #cc6633"&gt;#region&lt;/span&gt; IValueConverter Members&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; Convert(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;, Type targetType, &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; parameter, System.Globalization.CultureInfo culture)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.IsNullOrEmpty((&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;)&lt;span style="color: #0000ff"&gt;value&lt;/span&gt;))&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SolidColorBrush(Colors.White);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; valor = Decimal.Parse((&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;)&lt;span style="color: #0000ff"&gt;value&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (valor &amp;lt; 1000)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SolidColorBrush(Colors.Blue);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (valor &amp;lt;= 3000)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SolidColorBrush(Colors.Yellow);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SolidColorBrush(Colors.Red);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt;  19:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt;  20:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt;  21:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; ConvertBack(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;, Type targetType, &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; parameter, System.Globalization.CultureInfo culture)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt;  22:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt;  23:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; NotImplementedException();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum24"&gt;  24:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum25"&gt;  25:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum26"&gt;  26:&lt;/span&gt;     &lt;span style="color: #cc6633"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum27"&gt;  27:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;A forma de aplicação é a mesma do &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=8781626267604267737" target="_blank"&gt;exemplo anterior&lt;/a&gt; :&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;1) Cria-se a classe em uma silverlight class library&lt;/p&gt;

  &lt;p&gt;2) Inclui-se o converter como um resource na interface&lt;/p&gt;

  &lt;p&gt;3) Utiliza-se o converter em um binding, neste caso entre a propriedade background e uma propriedade que contenha o valor em questão.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pode-se usar esse exemplo de value converter em um binding com o background de uma célula da datagrid, por exemplo.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-5864595765097446388?l=cidadaocarioca.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/pYK7pJqtrOs/background-value-converter.html</link><author>noreply@blogger.com (Dennes)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-O8oCW16KOHs/Te4_p32EKYI/AAAAAAAACwM/ca_IUozNaGc/s72-c/Microsoft_Silverlight_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2011/06/background-value-converter.html</feedburner:origLink></item></channel></rss>

