<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rodrigo Díaz Concha &#187; Silverlight</title>
	<atom:link href="http://rdiazconcha.com/category/silverlight/feed/" rel="self" type="application/rss+xml" />
	<link>http://rdiazconcha.com</link>
	<description>Silverlight y XAML en Español para México, Latinoamérica y España</description>
	<lastBuildDate>Thu, 02 Feb 2012 20:54:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Desarrollo de Aplicaciones para Windows Phone 7.1 @ Microsoft Venezuela (16 y 17 de Febrero 2012)</title>
		<link>http://rdiazconcha.com/2012/02/desarrollo-de-aplicaciones-para-windows-phone-7-1-microsoft-venezuela-16-y-17-de-febrero-2012/</link>
		<comments>http://rdiazconcha.com/2012/02/desarrollo-de-aplicaciones-para-windows-phone-7-1-microsoft-venezuela-16-y-17-de-febrero-2012/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 20:54:15 +0000</pubDate>
		<dc:creator>Rodrigo</dc:creator>
				<category><![CDATA[Cursos]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Windows Phone 7.1]]></category>
		<category><![CDATA[capacitación]]></category>
		<category><![CDATA[caracas]]></category>
		<category><![CDATA[curso]]></category>
		<category><![CDATA[entrenamiento]]></category>
		<category><![CDATA[formación]]></category>
		<category><![CDATA[training]]></category>
		<category><![CDATA[venezuela]]></category>

		<guid isPermaLink="false">http://rdiazconcha.com/?p=1496</guid>
		<description><![CDATA[Les invito cordialmente al curso “Desarrollo de Aplicaciones para Windows Phone 7.1”, el cual se llevará a cabo los próximos días 16 y 17 de Febrero 2012 en las oficinas de Microsoft Venezuela en Caracas.&#160; La información completa es la siguiente:
Descripción
Silverlight es una de las plataformas de desarrollo para la nueva versión del sistema operativo [...]]]></description>
			<content:encoded><![CDATA[<p>Les invito cordialmente al curso “Desarrollo de Aplicaciones para Windows Phone 7.1”, el cual se llevará a cabo los próximos días <strong>16 y 17 de Febrero 2012</strong> en las oficinas de <strong>Microsoft Venezuela </strong>en Caracas.&#160; <a href="http://rdiazconcha.com/Talleres/Venezuela/Taller_16Febrero2012.html" target="_blank">La información completa</a> es la siguiente:</p>
<blockquote><h4>Descripción</h4>
<p>Silverlight es una de las plataformas de desarrollo para la nueva versión del sistema operativo móvil <a href="http://create.msdn.com/en-us/home/getting_started"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" border="0" alt="Windows Phone" align="left" src="http://rdiazconcha.com/Talleres/Venezuela/WP-Logo.png" /></a>Windows Phone 7.1 el cual cuenta con modernas características en su interfaz de usuario, especificaciones de hardware robustas y consistentes así como también el respaldo de un mercado para aplicaciones en constante crecimiento.</p>
<p>Este curso está enfocado en enseñarte de <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px; padding-top: 0px" border="0" alt="Windows Phone 7" align="right" src="http://rdiazconcha.com/Talleres/Venezuela/windows7-people.jpg" width="220" height="143" />una manera rápida, sencilla y con profundidad técnica la manera de construir aplicaciones móviles con Silverlight para Windows Phone 7.1 y explicar los conceptos fundamentales y mejores prácticas para este tipo de aplicativos incluyendo el patrón de diseño arquitectónico MVVM.</p>
<h4>Temario</h4>
<ul>
<li>Enlace de Datos </li>
<li>Framework de Navegación </li>
<li>Almacenamiento Aislado </li>
<li>Ciclo de Vida de las Aplicaciones </li>
<li>SIP y ámbitos de entrada </li>
<li>Barra de Aplicación </li>
<li>Ejecutores y Selectores </li>
<li>Sensores del teléfono </li>
<li>Orientaciones </li>
<li>Controles Panorama y Pivot </li>
<li>Detección de Conectividad </li>
<li>Notificaciones de tipo Push </li>
<li>Base de Datos local </li>
<li>Multi tasking </li>
<li>Agentes en segundo plano </li>
<li>Live Tiles </li>
<li>Contactos y Calendario </li>
<li>El Patrón de Diseño Model-View-ViewModel (MVVM) </li>
<li>&#8230;y más </li>
<li><strong>Material completamente en Español</strong></li>
</ul>
<h4>Audiencia</h4>
<p>Desarrolladores profesionales <strong>con experiencia mínima de 6 meses</strong> en la plataforma de desarrollo .NET y el lenguaje C#</p>
<h4>Costo</h4>
<p><strong>2464 Bs.F IVA incluido por participante</strong></p>
<h4>Fecha y Horario</h4>
<p>16 y 17 de Febrero 2012</p>
<p>09:00 a 18:00 horas</p>
<h4>Lugar</h4>
<p><strong>Microsoft Venezuela</strong></p>
<p>Av. Principal de la Castellana Centro Letonia</p>
<p>Torre ING Bank, Piso 10</p>
<p>Caracas, Venezuela</p>
<h4>¿Qué llevar?</h4>
<ul>
<li>Laptop con procesador Intel Core Duo o superior con 2 GB de RAM (4 GB o más recomendados) y 15 GB o más de espacio disponible en el disco duro </li>
<li>Visual Studio .NET 2010 en inglés (cualquier edición) o <a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/windows-phone-developer-tools">Visual Studio 2010 Express para&#160; Windows Phone</a></li>
<li><a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5&amp;displaylang=en">Visual Studio .NET 2010 Service Pack 1 en inglés</a></li>
<li><a href="http://www.microsoft.com/download/en/details.aspx?id=27570">SDK de Windows Phone 7.1</a></li>
</ul>
<h4>¿Cuándo debo pagar?</h4>
<p>La fecha límite de pago para participar en el curso será el día 15 de Febrero 2012</p>
<h4>¿Cuáles son las formas de pago?</h4>
<p>Pago bancario a la siguiente cuenta:</p>
<p>Nombre del banco: Banesco     <br />Cuenta Corriente: 0134-0220-54-2201019535      <br />Nombre del Beneficiario: Widetech Consulting, C.A.      <br />RIF: J-29410398-7      <br />Cuenta en Bolívares Fuertes (Bs.F)</p>
<h4></h4>
<h4>Registro</h4>
<p><strong>¡El cupo es limitado!</strong> Para registrarte al curso, manda un correo a <a href="mailto:info@devmasters.com.mx?subject=Registro%20al%20Taller">i</a><a href="mailto:info@devmasters.com.mx?subject=Registro%20al%20Taller">nfo@devmasters.com.mx</a> con tu nombre completo tal y como quieres que aparezca en tu Certificado de asistencia.&#160; Por favor no olvides marcar la dirección <a href="mailto:info@devmasters.com.mx?subject=Registro%20al%20Taller">info@devmasters.com.mx</a> como dirección segura.</p>
<h4>¿Qué incluye?</h4>
<ul>
<li>Dos días completos de intenso entrenamiento en Silverlight para Windows Phone 7.1 (Mango) </li>
<li>Material digital completamente en Español </li>
<li>Certificado de asistencia</li>
</ul>
</blockquote>
<p>El cupo está limitado, así que si están interesados les sugieron nos escriban para registrarse.</p>
<p>¡Allá nos vemos!</p>
]]></content:encoded>
			<wfw:commentRss>http://rdiazconcha.com/2012/02/desarrollo-de-aplicaciones-para-windows-phone-7-1-microsoft-venezuela-16-y-17-de-febrero-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nueva carrera en Microsoft Virtual Academy: Windows Phone 7.1 (Mango)</title>
		<link>http://rdiazconcha.com/2011/11/nueva-carrera-en-microsoft-virtual-academy-windows-phone-7-1-mango/</link>
		<comments>http://rdiazconcha.com/2011/11/nueva-carrera-en-microsoft-virtual-academy-windows-phone-7-1-mango/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 15:03:02 +0000</pubDate>
		<dc:creator>Rodrigo</dc:creator>
				<category><![CDATA[MVP]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Silverlight 4]]></category>
		<category><![CDATA[Windows Phone 7.1]]></category>
		<category><![CDATA[capacitación]]></category>
		<category><![CDATA[entrenamiento]]></category>
		<category><![CDATA[latam]]></category>
		<category><![CDATA[msdn]]></category>
		<category><![CDATA[mva]]></category>

		<guid isPermaLink="false">http://rdiazconcha.com/2011/11/nueva-carrera-en-microsoft-virtual-academy-windows-phone-7-1-mango/</guid>
		<description><![CDATA[Tengo el gusto de darles a conocer la disponibilidad de una nueva carrera en el Microsoft Virtual Academy (MVA): La carrera de Windows Phone 7.1 Mango.
Esta es la descripción de la carrera:
Windows Phone es la nueva versión del sistema operativo móvil de Microsoft, el cual es un sistema operativo moderno, fresco y novedoso que te [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/11/mva.png"><img style="background-image: none; border-right-width: 0px; margin: 0px 10px 0px 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="mva" border="0" alt="mva" align="left" src="http://rdiazconcha.com/wp-content/uploads/2011/11/mva_thumb.png" width="155" height="70" /></a>Tengo el gusto de darles a conocer la disponibilidad de una nueva carrera en el <a href="http://www.microsoftvirtualacademy.com/Home.aspx" target="_blank">Microsoft Virtual Academy</a> (MVA): La <a href="http://www.microsoftvirtualacademy.com/tracks/windows-phone-7" target="_blank">carrera de Windows Phone 7.1 Mango</a>.</p>
<p>Esta es la descripción de la carrera:</p>
<blockquote><p>Windows Phone es la nueva versión del sistema operativo móvil de Microsoft, el cual es un sistema operativo moderno, fresco y novedoso que te permite realizar más en menos tiempo y estar al tanto de las cosas que más te importan de una más rápida y divertida. Con la última versión 7.1 conocida con el nombre clave “Mango”, el construir aplicaciones para el teléfono jamás había sido tan fácil ya que una de las plataformas de<a href="http://www.microsoftvirtualacademy.com/tracks/windows-phone-7" target="_blank"><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="WP-Logo1" border="0" alt="WP-Logo1" align="right" src="http://rdiazconcha.com/wp-content/uploads/2011/11/WP-Logo1.png" width="300" height="84" /></a> desarrollo soportadas es <a href="http://silverlight.net" target="_blank">Silverlight</a> 4: una plataforma robusta, moderna y altamente funcional.&#160;&#160; En esta Carrera estudiarás los conceptos fundamentales de Silverlight para Windows Phone Mango y conocerás cómo aprovechar al máximo las características específicas de este tipo de dispositivos en beneficio de tus aplicaciones.</p>
</blockquote>
<p>La carrera tiene en este momento los siguientes módulos:</p>
<p><strong>Nivel Básico</strong></p>
<ul>
<li>Capítulo I: Fundamentos de Silverlight y Windows Phone </li>
<li>Capítulo II: Layout y Entrada Táctil </li>
<li>Capítulo III: Visuales y Medios </li>
<li>Capítulo IV: Publicación de Aplicaciones </li>
</ul>
<p><strong>Nivel Intermedio</strong></p>
<ul>
<li>Capítulo V: Trabajando con Datos </li>
<li>Capítulo VI: Sensores y otras características especiales del teléfono </li>
<li>Capítulo VII: Ciclo de Vida de las Aplicaciones Windows Phone </li>
</ul>
<p>Al estudiar las diferentes carreras de <a href="http://www.microsoftvirtualacademy.com/Home.aspx" target="_blank">MVA</a> puedes incrementar tus habilidades como desarrollador en las diversas tecnologías incluidas. Las carreras en MVA son una excelente opción de entrenamiento, son completamente gratuitas y además puedes estudiar a tu propio ritmo.</p>
<p>Los invito cordialmente a que se registren <a href="http://www.microsoftvirtualacademy.com/tracks/windows-phone-7" target="_blank">en esta dirección</a>, estudien la carrera y demuestren sus conocimientos en esta extraordinaria plataforma de desarrollo!</p>
<p>Espero les agrade.</p>
<p>Salu2!</p>
]]></content:encoded>
			<wfw:commentRss>http://rdiazconcha.com/2011/11/nueva-carrera-en-microsoft-virtual-academy-windows-phone-7-1-mango/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Silverlight para Windows Phone Mango: Fast Application Switching (FAS)</title>
		<link>http://rdiazconcha.com/2011/11/silverlight-para-windows-phone-mango-fast-application-switching-fas/</link>
		<comments>http://rdiazconcha.com/2011/11/silverlight-para-windows-phone-mango-fast-application-switching-fas/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 07:44:36 +0000</pubDate>
		<dc:creator>Rodrigo</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Silverlight 4]]></category>
		<category><![CDATA[Windows Phone 7.1]]></category>
		<category><![CDATA[Mango]]></category>
		<category><![CDATA[msdn]]></category>
		<category><![CDATA[mva]]></category>

		<guid isPermaLink="false">http://rdiazconcha.com/2011/11/silverlight-para-windows-phone-mango-fast-application-switching-fas/</guid>
		<description><![CDATA[En la versión inicial de Windows Phone 7, cuando una aplicación estaba activa pero era interrumpida por cualquier que sea la causa (una llamada entrante, un mensaje del sistema, el usuario apretó el botón “Atrás” del teléfono, el usuario apretó el menú de inicio, etcétera), la aplicación entraba en un estado de suspensión, conocido como [...]]]></description>
			<content:encoded><![CDATA[<p>En la versión inicial de Windows Phone 7, cuando una aplicación estaba activa pero era interrumpida por cualquier que sea la causa (una llamada entrante, un mensaje del sistema, el usuario apretó el botón “Atrás” del teléfono, el usuario apretó el menú de inicio, etcétera), la aplicación entraba en un estado de suspensión, conocido como <a href="http://blogs.ligasilverlight.com/2011/06/ejecutando-una-aplicacin-en-segundo-plano-tombstoning/" target="_blank">Tombstoning</a>.</p>
<p>Este proceso de <a href="http://blogs.ligasilverlight.com/2011/06/ejecutando-una-aplicacin-en-segundo-plano-tombstoning/" target="_blank">Tombstoning</a> guardaba a disco el estado de la aplicación, de tal manera que si apretábamos nuevamente el botón “Atrás” del teléfono para regresar a la aplicación, la aplicación era rescatada de su estado desde el disco nuevamente hacia la memoria y se reactivaba para poder seguir usándola.&#160; Este proceso era sumamente tardado y no brindaba la mejor experiencia de usuario posible.</p>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/11/image.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://rdiazconcha.com/wp-content/uploads/2011/11/image_thumb.png" width="300" height="202" /></a>En Windows Phone Mango se introduce un concepto denominado Fast Application Switching (o FAS, por sus siglas en el idioma inglés).&#160; Este concepto cambia el ciclo de vida de las aplicaciones de Windows Phone, ya que cuando una aplicación está ejecutando y es interrumpida (nuevamente, por cualquiera que sea la causa), la aplicación no entra a Tombstoning inmediatamente sino que entra en un estado denominado “Dormant”, de tal manera que continúa en memoria pero sin consumir recursos del CPU del teléfono.&#160; De esta forma, al pulsar el botón “Atrás” para regresar a la aplicación, la restauración es casi instantánea ya que no tiene que leer el estado desde el disco sino de la memoria, siendo este mecanismo una característica muy importante en Windows Phone Mango para brindar una experiencia de usuario superior a la versión inicial del sistema operativo.    </p>
<h2>Propiedad IsApplicationInstancePreserved</h2>
<p>En el objeto de argumentos del eventos Activated de la aplicación, se ha agregado en Windows Phone Mango la propiedad IsApplicationInstancePreserved, la cual indica si la aplicación está siendo restaurada del estado Dormant (valor true) o se está restaurando desde su estado de Tombstoning (valor false).</p>
<blockquote><p>La idea detrás de esta propiedad es poder determinar si restauramos el estado de la aplicación o no.&#160; El algoritmo es sencillo: si la aplicación está restaurándose desde el estado Dormant, no tenemos que hacer nada, solo si está restaurándose desde el estado Tombstoning.</p>
</blockquote>
<p>Para poder determinar este valor dentro de las páginas de nuestras aplicaciones, podemos exponer un campo estático de tipo bool dentro de la clase de aplicación, el cual podrá ser inicializado justamente durante el evento Activated.&#160; El siguiente fragmento de código muestra cómo se implementa un campo público estático que guardará el valor de la propiedad IsApplicationInstancePreserved.&#160; En este caso, el nombre del campo es el mismo pero esto no es necesario.</p>
<pre class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">void</span> Application_Activated(<span class="kwrd">object</span> sender, ActivatedEventArgs e)
{
    IsApplicationInstancePreserved = e.IsApplicationInstancePreserved;
}

<span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">bool</span> IsApplicationInstancePreserved;</pre>
<style type="text/css">
.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; }</style>
<p>&#160;</p>
<p>Ya dentro de la página en cuestión, podemos leer el valor de este campo para realizar cualquier tipo de algoritmo relacionado.&#160; En este caso, simplemente estoy mostrando los valores “Dormant” o “Tombstoning” según sea el caso.</p>
<pre class="csharpcode"><span class="kwrd">protected</span> <span class="kwrd">override</span> <span class="kwrd">void</span> OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    <span class="kwrd">base</span>.OnNavigatedTo(e);

    texto.Text = App.IsApplicationInstancePreserved ? <span class="str">&quot;Dormant&quot;</span> : <span class="str">&quot;Tombstoning&quot;</span>;
}</pre>
<style type="text/css">
.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; }</style>
<p>&#160;</p>
<p>La siguiente ilustración, muestra la aplicación de ejemplo corriendo después de haber sido restaurada desde el estado Dormant.</p>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/11/SNAGHTML2a4beba.png"><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="SNAGHTML2a4beba" border="0" alt="SNAGHTML2a4beba" src="http://rdiazconcha.com/wp-content/uploads/2011/11/SNAGHTML2a4beba_thumb.png" width="221" height="400" /></a></p>
<h2>Resumen</h2>
<p>Con Fast Application Switching (o FAS, por sus siglas en inglés), nuestras aplicaciones de Silverlight para Windows Phone Mango son más responsivas y brindan una mejor experiencia de usuario ya que su restauración es casi inmediata, a diferencia de la versión inicial de Windows Phone 7, en donde se tenía que restaurar el estado de cada aplicación desde disco.&#160; Esta característica ya es parte del sistema operativo, por lo que únicamente nos queda como desarrolladores determinar en el evento Activated si la aplicación está siendo restaurada desde el estado Dormant o el estado Tombstoning.</p>
]]></content:encoded>
			<wfw:commentRss>http://rdiazconcha.com/2011/11/silverlight-para-windows-phone-mango-fast-application-switching-fas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Silverlight para Windows Phone Mango: Bases de Datos locales con SQL Server CE&#8211;Parte 2</title>
		<link>http://rdiazconcha.com/2011/11/silverlight-para-windows-phone-mango-bases-de-datos-locales-con-sql-server-ceparte-2/</link>
		<comments>http://rdiazconcha.com/2011/11/silverlight-para-windows-phone-mango-bases-de-datos-locales-con-sql-server-ceparte-2/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 07:07:19 +0000</pubDate>
		<dc:creator>Rodrigo</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Silverlight 4]]></category>
		<category><![CDATA[Windows Phone 7.1]]></category>
		<category><![CDATA[Mango]]></category>
		<category><![CDATA[msdn]]></category>
		<category><![CDATA[mva]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://rdiazconcha.com/2011/11/silverlight-para-windows-phone-mango-bases-de-datos-locales-con-sql-server-ceparte-2/</guid>
		<description><![CDATA[En el artículo anterior, mencioné que es a través de LINQ para SQL el mecanismo por el cual interactuamos completamente con la base de datos de nuestras aplicaciones de Silverlight para Windows Phone Mango.&#160; En este artículo veremos cómo programáticamente podemos crear una base de datos e interactuar completamente con ella.
Definición de la base de [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://rdiazconcha.com/2011/10/silverlight-para-windows-phone-mango-bases-de-datos-locales-con-sql-server-ceparte-1/" target="_blank">En el artículo anterior</a>, mencioné que es a través de LINQ para SQL el mecanismo por el cual interactuamos completamente con la base de datos de nuestras aplicaciones de Silverlight para Windows Phone Mango.&#160; En este artículo veremos cómo programáticamente podemos crear una base de datos e interactuar completamente con ella.</p>
<h2>Definición de la base de datos</h2>
<p>Para definir el modelo de la base de datos para nuestras aplicaciones de Windows Phone Mango, debemos utilizar la técnica de “Primero el Código” (o “Code First” como se le conoce en el idioma inglés).&#160; Esta técnica te permite definir tu modelo por medio de clases y atributos.&#160; Una vez definidas las clases, éstas pueden ser utilizadas para generar el esquema de la base de datos o mapearse a una base de datos ya existente.</p>
<h3>Creación de las tablas</h3>
<p>Para definir una tabla para la base de datos debemos utilizar los atributos TableAttribute y ColumnAttribute, ambos del Espacio de Nombres System.Data.Linq.Mapping.&#160; Estos atributos, respectivamente, permiten identificar que una clase será una tabla dentro de la base de datos y que una propiedad dentro de esa clase será una columna dentro de la tabla.</p>
<blockquote><p>Estos atributos mencionados están incluidos en el ensamblado System.Data.Linq.dll, por lo que deberás incluir una referencia a él en tu proyecto para utilizarlos.</p>
</blockquote>
<p>El siguiente fragmento de código muestra la declaración de una tabla llamada Persona, la cual tendrá tres columnas: ID, Nombre y Empresa.</p>
<pre class="csharpcode">[Table]
<span class="kwrd">public</span> <span class="kwrd">class</span> Persona
{
    [Column(IsDbGenerated = <span class="kwrd">true</span>, IsPrimaryKey = <span class="kwrd">true</span>)]
    <span class="kwrd">public</span> <span class="kwrd">int</span> ID { get; set; }

    [Column]
    <span class="kwrd">public</span> <span class="kwrd">string</span> Nombre { get; set; }

    [Column(CanBeNull = <span class="kwrd">true</span>)]
    <span class="kwrd">public</span> <span class="kwrd">string</span> Empresa { get; set; }
}</pre>
<style type="text/css">
.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; }</style>
<p>&#160;</p>
<h3>Creación del contexto de datos</h3>
<p>El contexto de datos es un objeto que representa a la base de datos.&#160; El contexto de datos contiene las tablas, que a su vez contienen las columnas que definen dicha tabla.</p>
<p>Para crear un contexto de datos, debemos crear una clase que herede de la clase base DataContext, disponible en el Espacio de Nombres System.Data.Linq.&#160; Será en esta clase en donde debemos declarar las tablas que tendrá la base de datos.&#160; Asimismo, la clase que definamos podrá invocar alguno de los constructores de la clase base DataContext para pasar como parámetro la cadena de conexión que indique a cuál base de datos estamos interesados en conectarnos.</p>
<p>El siguiente código muestra la declaración de la clase PersonaDataContext, la cual hereda de System.Data.Linq.DataContext y que establece que existirá una tabla llamada Personas.</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> PersonaDataContext : DataContext
{
    <span class="kwrd">public</span> Table&lt;Persona&gt; Personas;

    <span class="kwrd">public</span> PersonaDataContext(<span class="kwrd">string</span> connectionString) : <span class="kwrd">base</span>(connectionString) { }
}</pre>
<style type="text/css">
.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; }</style>
<p>&#160;</p>
<p>Nota cómo el constructor de esta clase a su vez está invocando el constructor de su clase base.&#160; De esta manera permitiríamos utilizar una u otra cadena de conexión para reutilizar este contexto de datos en diferentes escenarios.</p>
<blockquote>
<p>La cadena de conexión puede ser cualquiera de las siguientes opciones: una cadena con el prefijo isostore:/, el nombre del archivo de base de datos dentro del Almacenamiento Aislado o una cadena de conexión completa.</p>
</blockquote>
<h3>Creación de la base de datos</h3>
<p>Para crear físicamente la base de datos en el Almacenamiento Aislado de la aplicación dentro del teléfono, debemos utilizar el método CreateDatabase() del contexto de datos.&#160; Para complementar esta tarea, también podemos ejecutar el método DatabaseExists() para determinar si la base de datos ya ha sido creada con anterioridad.</p>
<p>Para poder probar esta funcionalidad, he creado otra clase llamada PersonaDatabase, la cual encapsula la funcionalidad de creación física de la base de datos para la aplicación, tal y como lo muestra el siguiente código.</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> PersonaDatabase
{
    <span class="kwrd">public</span> <span class="kwrd">static</span> PersonaDataContext GetDatabase()
    {
        var context = <span class="kwrd">new</span> PersonaDataContext(<span class="str">&quot;isostore:/personas.sdf&quot;</span>);

        <span class="kwrd">if</span> (!context.DatabaseExists())
        {
            context.CreateDatabase();
        }

        <span class="kwrd">return</span> context;
    }
}</pre>
<style type="text/css">
.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; }</style>
<p>&#160;</p>
<h3>Inserción de datos</h3>
<p>Una vez creada la base de datos, podemos insertar datos a sus respectivas tablas, todo esto por medio de los mismos mecanismos que LINQ para SQL ofrece.&#160; En el siguiente código se demuestra la creación de 1000 personas que serán finalmente insertadas en la tabla Personas dentro de la base de datos que creamos en pasos anteriores.&#160; Nota el uso del método SubmitChanges(); este método se asegura de finalizar la transacción hacia el motor de base de datos.</p>
<pre class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> CrearDatos()
{
    var db = PersonaDatabase.GetDatabase();
    <span class="kwrd">for</span> (<span class="kwrd">int</span> i = 0; i &lt; 1000; i++)
    {
        db.Personas.InsertOnSubmit(<span class="kwrd">new</span> Persona()
        {
            Nombre = <span class="str">&quot;Persona &quot;</span> + i.ToString(),
            Empresa = <span class="str">&quot;MVA&quot;</span>
        });
    }
    db.SubmitChanges();
}</pre>
<p>
<style type="text/css">
.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; }</style>
</p>
<h3>Consulta de datos</h3>
<p>La consulta de datos hacia una base de datos de SQL Server CE usando LINQ para SQL es bastante sencilla si es que ya has utilizado el lenguaje LINQ en tus aplicaciones.&#160; El siguiente fragmento de código muestra el uso del lenguaje LINQ para consultar todas aquellas persona que incluyen en su nombre el número 5.&#160; El resultado de la consulta será la fuente de datos para un control ListBox.</p>
<pre class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">void</span> ConsultarDatos()
{
    var query = from persona <span class="kwrd">in</span> PersonaDatabase.GetDatabase().Personas
                <span class="kwrd">where</span> persona.Nombre.Contains(<span class="str">&quot;5&quot;</span>)
                orderby persona.ID
                select persona;

    lista.ItemsSource = query.ToList();
}</pre>
<style type="text/css">
.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; }</style>
<p>&#160;</p>
<p>La siguiente ilustración, muestra la aplicación ejecutando y después de haber consultado los datos según el código anterior.</p>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/11/SNAGHTML261447b.png"><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="SNAGHTML261447b" border="0" alt="SNAGHTML261447b" src="http://rdiazconcha.com/wp-content/uploads/2011/11/SNAGHTML261447b_thumb.png" width="278" height="500" /></a></p>
<blockquote>
<p>Nota: Para este ejemplo, hice override del método ToString() en la clase Persona para poder mostrar contenido significativo dentro del ListBox, sin necesidad de hacer una Plantilla de Datos; lo cual es altamente recomendable en una aplicación en la vida real, pero no es el enfoque del tema que aquí estamos tratando.</p>
</blockquote>
<h3>Actualización de datos</h3>
<p>Para actualizar los datos de una tabla de la base de datos local en una aplicación, debemos hacerlo igualmente bajo los mecanismos propios de LINQ para SQL, lo cual resulta bastante fácil.</p>
<p>Para demostrar este concepto, al proyecto de prueba he agregado una nueva página llamada Actualizacion.xaml, a la cual se navega después de seleccionar un elemento del ListBox que muestra la lista de personas.&#160; En esta nueva página se incluye un TextBox para cambiar el nombre de la persona seleccionada y finalmente, después de pulsar en el botón “Aceptar” los cambios son guardados de regreso en la base de datos con el siguiente código:</p>
<pre class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">void</span> Guardar()
{
    persona.Nombre = txtNombre.Text;
    dataContext.SubmitChanges();
}</pre>
<style type="text/css">
.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; }</style>
<p>&#160;</p>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/11/SNAGHTML284a9e2.png"><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="SNAGHTML284a9e2" border="0" alt="SNAGHTML284a9e2" src="http://rdiazconcha.com/wp-content/uploads/2011/11/SNAGHTML284a9e2_thumb.png" width="278" height="500" /></a></p>
<p>Es justamente el método SubmitChanges() el único mecanismo por el cual la base de datos es efectivamente actualizada con los cambios.</p>
<blockquote>
<p>Nota: El proyecto de ejemplo aquí usado no necesariamente cumple con las mejores prácticas y/o recomendaciones arquitectónicas para una aplicación en producción, sino que únicamente trata de demostrar los conceptos de acceso a bases de datos locales aquí tratados.</p>
</blockquote>
<h2>Actualización del esquema de la base de datos</h2>
<p>Los cambios pueden ocurrir en todo momento y el estar preparados para ello es sumamente importante para poder construir aplicativos robustos, extensibles y de fácil mantenimiento.</p>
<p>La clase DatabaseSchemaUpdater nos permite realizar modificaciones a un esquema pre existente de base de datos, como por ejemplo: modificaciones a las tablas, columnas, índices, claves foráneas y asociaciones, etc.</p>
<h3>Método CreateDatabaseSchemaUpdater</h3>
<p>El método CreateDatabaseSchemaUpdater del objeto de contexto de datos nos permite hacer las actualizaciones adecuadas al esquema de la base de datos.&#160; Por ejemplo, el siguiente código agrega una nueva tabla al esquema:</p>
<pre class="csharpcode">var context = <span class="kwrd">new</span> PersonaDataContext(“isostore:/personas.sdf&quot;);
var updater = context.CreateDatabaseSchemaUpdater();
updater.AddTable&lt;Producto&gt;();</pre>
<p>
<style type="text/css">
.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; }</style>
</p>
<p>O tal vez, quisieras agregar una nueva columna a una tabla ya existente:</p>
<pre class="csharpcode">updater.AddColumn&lt;Persona&gt;(<span class="str">&quot;FechaNacimiento&quot;</span>);</pre>
<style type="text/css">
.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; }</style>
<p>&#160;</p>
<p>Finalmente, debemos ejecutar el método Execute() para poder realizar los cambios en el esquema de la base de datos:</p>
<pre class="csharpcode">updater.Execute();</pre>
<style type="text/css">
.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; }</style>
<p>&#160;</p>
<h2>Resumen</h2>
<p>Windows Phone Mango incluye SQL Server CE, un motor de base de datos relacional para poder almacenar cualquier tipo de cantidad de datos de manera privada en nuestras aplicaciones para el teléfono.&#160; El mecanismo por el cual podemos interactuar con esta base de datos en LINQ para SQL, ya que la ejecución directa de sentencias Transact-SQL no está permitida por motivos de rendimiento.&#160; LINQ para SQL nos permite definir la base de datos y también nos permite realizar las operaciones CRUD necesarias para nuestros aplicativos, lo cual demuestra una vez más lo importante que es comprender y adoptar este moderno lenguaje de consultas.</p>
]]></content:encoded>
			<wfw:commentRss>http://rdiazconcha.com/2011/11/silverlight-para-windows-phone-mango-bases-de-datos-locales-con-sql-server-ceparte-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Silverlight para Windows Phone Mango: Bases de Datos locales con SQL Server CE&#8211;Parte 1</title>
		<link>http://rdiazconcha.com/2011/10/silverlight-para-windows-phone-mango-bases-de-datos-locales-con-sql-server-ceparte-1/</link>
		<comments>http://rdiazconcha.com/2011/10/silverlight-para-windows-phone-mango-bases-de-datos-locales-con-sql-server-ceparte-1/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 05:23:12 +0000</pubDate>
		<dc:creator>Rodrigo</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Silverlight 4]]></category>
		<category><![CDATA[Windows Phone 7.1]]></category>
		<category><![CDATA[Mango]]></category>
		<category><![CDATA[mva]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://rdiazconcha.com/2011/10/silverlight-para-windows-phone-mango-bases-de-datos-locales-con-sql-server-ceparte-1/</guid>
		<description><![CDATA[Windows Phone Mango incluye SQL Server CE, motor de bases de datos relacionales lo suficientemente pequeña para que ejecute en el teléfono, pero a la vez bastante poderosa como para cubrir todas las necesidades de almacenamiento de datos relacionales para nuestras aplicaciones.&#160; En este artículo hablaremos de cómo crear una nueva base de datos para [...]]]></description>
			<content:encoded><![CDATA[<p>Windows Phone Mango incluye SQL Server CE, motor de bases de datos relacionales lo suficientemente pequeña para que ejecute en el teléfono, pero a la vez bastante poderosa como para cubrir todas las necesidades de almacenamiento de datos relacionales para nuestras aplicaciones.&#160; En este artículo hablaremos de cómo crear una nueva base de datos para nuestras aplicaciones de Silverlight para Windows Phone Mango, así como las operaciones CRUD (Create, Read, Update, Delete) básicas.</p>
<h2>La necesidad de una base de datos local</h2>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/10/SNAGHTML20253b54.png"><img style="background-image: none; border-right-width: 0px; margin: 0px 10px 0px 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="SNAGHTML20253b5[4]" border="0" alt="SNAGHTML20253b5[4]" align="left" src="http://rdiazconcha.com/wp-content/uploads/2011/10/SNAGHTML20253b54_thumb.png" width="195" height="300" /></a>Hay una gran cantidad de escenarios en donde contar con una base de datos relacional es justamente uno de los requerimientos básicos.&#160; Por ejemplo: el tener catálogos de datos locales que puedan ser utilizados cuando la señal de datos del teléfono se pierda, o un caché local de datos que posteriormente puedan ser sincronizados a un almacenamiento más robusto y persistente (la Nube, por ejemplo) y un largo etcétera.</p>
<p>SQL Server CE en Windows Phone Mango, cubre precisamente ese requerimiento.&#160; Con esto obtenemos una gran cantidad de ventajas, como por ejemplo: tener a nuestro alcance un almacenamiento de datos robusto, el poder crear consultas complejas a dichos datos, no tener que referenciar ensamblados de terceros.&#160; Adicionalmente a esto, todas las operaciones de tipo CRUD son manejadas eficientemente por el mismo motor, además de que contamos con un API consistente.&#160; </p>
<p>Es muy importante mencionar que cada base de datos es privada para cada aplicación, y físicamente es guardada en el Almacenamiento Aislado privado que tiene cada aplicación en Silverlight para Windows Phone Mango, por lo que no es posible (al momento de estar escribiendo este artículo”) tener una base de datos común para varias aplicaciones dentro del teléfono.&#160; También es de suma importancia destacar que SQL Server CE no corre como un servicio en segundo plano dentro del teléfono, sino que correrá únicamente en el mismo proceso que la aplicación que lo invoca.</p>
<p>Mencioné que hay algunas ventajas.&#160; Claro que las hay.&#160; Sin embargo, también hay algunas desventajas:</p>
<p><strong>No se permite Transact-SQL directo</strong></p>
<p>Es común entre los desarrolladores de aplicaciones que tengan que escribir ellos mismos las sentencias CRUD para realizar las operaciones en su base de datos.&#160; En SQL Server CE para Windows Phone Mango no es posible ejecutar consultar Transact-SQL de manera directa.</p>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/10/image3.png"><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="image" border="0" alt="image" src="http://rdiazconcha.com/wp-content/uploads/2011/10/image_thumb3.png" width="517" height="41" /></a></p>
<blockquote><p>Lo sé.&#160; Para algunas personas, el no tener que escribir sentencias Transact-SQL de manera manual es más bien, una ventaja <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://rdiazconcha.com/wp-content/uploads/2011/10/wlEmoticon-smile.png" /></p>
</blockquote>
<p><strong>No hay un diseñador visual</strong></p>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/10/image4.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://rdiazconcha.com/wp-content/uploads/2011/10/image_thumb4.png" width="160" height="188" /></a>Si deseas crear un esquema para tu base de datos de SQL Server CE en Windows Phone Mango, lo debes hacer exclusivamente vía código.&#160; Cabe mencionar que hay algunos “hacks” que han hecho algunos desarrolladores para convertir un archivo de base de datos a una versión de SQL Server CE de Mango, pero este artículo se basa en los fundamentos del motor y sus posibilidades oficiales.</p>
<p>Pero entonces, si no podemos ejecutar directamente Transact-SQL y tampoco contamos con un diseñador visual para poder crear nuestras bases de datos, sus tablas, sus columnas, etc. ¿cómo lo podemos hacer?</p>
<p>La respuesta a esa pregunta es LINQ para SQL.</p>
<h2>LINQ para SQL</h2>
<p>LINQ (ojo: se pronuncia LINK, no LINKIÚ como muchas personas escucho que lo hacen) para SQL es un OR/M (Object-Relational Mapper por sus siglas en inglés).&#160; Un OR/M tiene como objetivo en la vida ser un framework que, basándose en un modelo relacional, deriva un modelo de clases y todas las operaciones CRUD pertinentes para ese modelo relacional… y nuestras aplicaciones pueden usar ese modelo de clases directamente sin necesidad de ejecutar explícitamente ni una sola línea del lenguaje SQL que soporte ese motor de base de datos en cuestión.&#160; Eso es precisamente el por qué no es necesario ejecutar directamente cláusulas T-SQL hacia nuestras bases de datos de Windows Phone Mango.</p>
<p>LINQ para SQL es usado en Windows Phone Mango para todas las operaciones CRUD –como mencioné anteriormente-, y también para todas las operaciones de tipo DDL (Data Definition Language), es decir, para la creación del esquema de la base de datos, sus tablas, columnas, claves foráneas, etcétera.</p>
<blockquote><p>LINQ para SQL está implementado solo de manera parcial en Windows Phone Mango.&#160; Para mayor información <a href="http://msdn.microsoft.com/es-mx/library/hh202872%28v=vs.92%29.aspx" target="_blank">consulta esta página</a>.</p>
</blockquote>
<p>Luego entonces, nuestras aplicaciones deben hacer uso del lenguaje LINQ, para poder realizar las operaciones hacia la base de datos.&#160; El rol que juega LINQ para SQL es el traducir esas consultas de LINQ hacia Transact-SQL y ejecutarlas en el motor de base de datos.&#160; Cuando la base de datos regrese resultados (por ejemplo, de una consulta) esos datos son traducidos de regreso a objetos que puedas utilizar dentro de tu aplicación.&#160; Esta traducción –de ida y de vuelta- la realiza automáticamente LINQ para SQL sin tu intervención, por lo que la eficiencia al momento de programar se incrementa considerablemente.&#160; Solo es cuestión de acostumbrarse a este paradigma y conocer sus diversas posibilidades.</p>
<p>En la siguiente parte de este artículo veremos cómo programáticamente crear una base de datos nueva dentro de una aplicación de Silverlight para Windows Phone Mango, llenarla de datos, consultar esos datos y actualizarlos.</p>
]]></content:encoded>
			<wfw:commentRss>http://rdiazconcha.com/2011/10/silverlight-para-windows-phone-mango-bases-de-datos-locales-con-sql-server-ceparte-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Anunciando: La Entrevista MVP</title>
		<link>http://rdiazconcha.com/2011/10/anunciando-la-entrevista-mvp/</link>
		<comments>http://rdiazconcha.com/2011/10/anunciando-la-entrevista-mvp/#comments</comments>
		<pubDate>Sat, 22 Oct 2011 20:57:16 +0000</pubDate>
		<dc:creator>Rodrigo</dc:creator>
				<category><![CDATA[Comunidades]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[La Liga Silverlight]]></category>
		<category><![CDATA[MVP]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[entrevista]]></category>

		<guid isPermaLink="false">http://rdiazconcha.com/2011/10/anunciando-la-entrevista-mvp/</guid>
		<description><![CDATA[A partir de lo anunciado en el evento Build el 13 de Septiembre 2011 con respecto a Windows 8 y su Plataforma de Desarrollo, conocer Silverlight es ahora más importante y relevante que nunca.
En La Liga Silverlight – La Primera Comunidad MSDN en Español acerca de Silverlight y tecnologías relacionadas, nos hemos dado a la [...]]]></description>
			<content:encoded><![CDATA[<p>A partir de lo anunciado en el evento <a href="http://www.buildwindows.com" target="_blank">Build</a> el 13 de Septiembre 2011 con respecto a <a href="http://rdiazconcha.com/imagenes/win8-platform-and-tools.jpg" target="_blank">Windows 8 y su Plataforma de Desarrollo</a>, conocer <a href="http://silverlight.net" target="_blank">Silverlight</a> es ahora más importante y relevante que nunca.</p>
<p>En <a href="http://blogs.LigaSilverlight.com" target="_blank">La Liga Silverlight</a> – La Primera Comunidad MSDN en Español acerca de Silverlight y tecnologías relacionadas, nos hemos dado a la tarea de entrevistar a diversas personalidades y líderes de opinión en el ámbito tecnológico de <a href="http://silverlight.net" target="_blank">Silverlight</a> quienes nos estarán dando a conocer sus puntos de vista con respecto a este y demás temas.</p>
<p>Les presento: <strong>La Entrevista MVP</strong></p>
<h3>La Entrevista MVP</h3>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/10/mics.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="mics" border="0" alt="mics" align="left" src="http://rdiazconcha.com/wp-content/uploads/2011/10/mics_thumb.jpg" width="244" height="164" /></a><strong>La Entrevista MVP </strong>es una entrevista (inicialmente por escrito, probablemente hagamos alguna entrevista audiovisual a mediano plazo), con periodicidad mensual, en donde podrán obtener de primera mano los puntos de vista, opiniones y comentarios de varios Profesionales Más Valiosos (<a href="http://mvp.support.microsoft.com/" target="_blank">MVP</a>) de Microsoft, principalmente de Silverlight.</p>
<p>Hoy en día, es sumamente fácil toparnos con pseudo-periodismo digital, ignorante, mal informado y tendencioso, que lo único que hacen es confundir más a las personas que –erróneamente- los leen o escuchan, por lo que es excelente idea el tener a nuestro alcance las <strong>opiniones directas </strong>de profesionales que saben <u>verdaderamente</u> de lo que están hablando y que cuentan con información y argumentos privilegiados para opinar, contundentemente, acerca de la tecnología en la que son Expertos.</p>
<p>Las entrevistas estarán disponibles mensualmente (y si es posible, más frecuentemente) en el sitio de La Liga Silverlight y estarán completamente traducidas a nuestro bello idioma.</p>
<p>¿Les gusta la idea?&#160; ¡No se pierdan esta serie, que estará bastante interesante!</p>
<p> Salu2!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://rdiazconcha.com/2011/10/anunciando-la-entrevista-mvp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>&#191;Navajas o Llaves?</title>
		<link>http://rdiazconcha.com/2011/08/navajas-o-llaves/</link>
		<comments>http://rdiazconcha.com/2011/08/navajas-o-llaves/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 03:51:40 +0000</pubDate>
		<dc:creator>Rodrigo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Silverlight 5]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[silverlight 5]]></category>

		<guid isPermaLink="false">http://rdiazconcha.com/2011/08/navajas-o-llaves/</guid>
		<description><![CDATA[Permítanme presentarles a dos personas: él es una persona que se dedica a reparaciones automotrices, ella es ama de casa.&#160; Ella, en sus labores cotidianas se encuentra a veces con la necesidad de hacer alguna reparación rápida, o el ajuste de algún aparato eléctrico en su hogar.&#160; Él desmonta neumáticos y desarma motores en un [...]]]></description>
			<content:encoded><![CDATA[<p>Permítanme presentarles a dos personas: él es una persona que se dedica a reparaciones automotrices, ella es ama de casa.&#160; Ella, en sus labores cotidianas se encuentra a veces con la necesidad de hacer alguna reparación rápida, o el ajuste de algún aparato eléctrico en su hogar.&#160; Él desmonta neumáticos y desarma motores en un taller mecánico.</p>
<p>Ella ha encontrado suficiente el tener esto a la mano en su hogar:</p>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/08/Swiss-Army-Knife.jpg"><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="Swiss Army Knife" border="0" alt="Swiss Army Knife" src="http://rdiazconcha.com/wp-content/uploads/2011/08/Swiss-Army-Knife_thumb.jpg" width="500" height="433" /></a></p>
<p>Él requiere este tipo de herramienta para realizar correctamente su trabajo:</p>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/08/Wrenches.jpg"><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="Wrenches" border="0" alt="Wrenches" src="http://rdiazconcha.com/wp-content/uploads/2011/08/Wrenches_thumb.jpg" width="500" height="375" /></a></p>
<p>¿Cuál de las dos personas aquí descritas tiene la mejor herramienta?&#160; </p>
<p>La respuesta es: <strong>ambos.</strong></p>
<p>Estas personas, han encontrado cuál herramienta es la mejor para sus necesidades reales.&#160; Probablemente, si él utilizara la herramienta de ella, sería deficiente en sus tareas diarias y encontraría que no podría hacer todo lo que su trabajo <strong>–o su cliente-</strong> le exigen.&#160; Y viceversa: ella probablemente encuentre que es un exceso el tener tanta herramienta si tan solo lo que ella necesita es apretar un tornillo, limar una astilla metálica o abrir una botella.</p>
<p><em><strong>El escenario suena lógico ¿cierto?</strong></em></p>
<p>Este escenario lo podríamos aplicar en una gran cantidad de casos, y en muchos de ellos probablemente estaríamos de acuerdo la mayoría de nosotros. Y la vida continuaría y seguiríamos pensando en otras cosas más importantes.</p>
<p>Sin embargo, esto no ha sido así con el tema de Silverlight v.s. HTML 5 (o HTML 5 v.s. .NET, o Flash v.s. HTML 5 o escribe aquí cualquier tema de discusión tecnológica: ________________), el cual ha sido hablado hasta el <font color="#000000"><strong>cansancio</strong></font> por una gran cantidad de personas -entendidas y no entendidas en el tema- y que ha llevado a la polarización de las opiniones, en un mundo en donde cualquier persona tiene voz y voto gracias a las redes sociales.&#160; Esto no está mal realmente, pero es preocupante el leer opiniones tendenciosas que solicitan optar por <em>blanco</em> o <em>negro</em>.&#160; Y esto realmente –creo- no debe ser así, ya que hay una gama infinita de grises enmedio de tan tajantes opciones.</p>
<h2>HTML 5</h2>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/08/Swiss-Army-Knife1.jpg"><img style="background-image: none; border-right-width: 0px; margin: 0px 10px 0px 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="Swiss Army Knife" border="0" alt="Swiss Army Knife" align="left" src="http://rdiazconcha.com/wp-content/uploads/2011/08/Swiss-Army-Knife_thumb1.jpg" width="204" height="177" /></a>HTML 5 es la quinta versión del estándar, el cual es el común denominador de todas la aplicaciones Web.&#160; Además, prácticamente es visible a través de cualquier navegador en el planeta: Firefox, Chrome, Opera, Safari, IE, el navegador del Wii, <strike>el navegador del Xbox</strike>, el navegador del PlayStation, el de tu teléfono Motorola, en tu Nokia, en tu iPod, iPhone y iPad, en tu BlackBerry, etc.etc.&#160; No cabe duda que esta es <strong>LA</strong> tecnología a escoger si tu objetivo es crear páginas/sitios Web, ya que seguramente querrás que tu sitio sea visible desde cualquier lado ¿no es así?&#160; HTML 5 cuenta con muchas mejoras y nuevas funcionalidades para crear sitios altamente atractivos, dejando atrás la necesidad de instalar un plugin como Flash o como Silverlight, los cuales fueron creados para subsanar las lagunas de funcionalidad presentes en el estándar actual: HTML 4.01.&#160; Estoy convencido que HTML sigue y seguirá siendo la “<em>lingua franca</em>” para todos los diseñadores y desarrolladores Web.</p>
<p>No obstante, HTML 5 aún no es implementado completamente por todos los navegadores.&#160; Claro está, <em>algún día</em> todo navegador entenderá HTML 5 completamente, pero creo será un callejón sin salida ya que las empresas que crean los navegadores hacen una implementación única del estándar, por lo que el “<em>estándar”</em> probablemente quede en una paradoja interminable.&#160; Seguirán existiendo las famosas páginas que dicen “Este sitio requiere _________ versión ___ o superior”.</p>
<h2>Silverlight 5</h2>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/08/Wrenches1.jpg"><img style="background-image: none; border-right-width: 0px; margin: 0px 10px 0px 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="Wrenches" border="0" alt="Wrenches" align="left" src="http://rdiazconcha.com/wp-content/uploads/2011/08/Wrenches_thumb1.jpg" width="204" height="154" /></a></p>
<p><a href="http://silverlight.net" target="_blank">Silverlight</a> es una plataforma de desarrollo de Aplicaciones de Negocio, que utiliza el lenguaje XAML para la definición de sus Interfaces de Usuario (Vistas) y que incluye el Common Language Runtime (CLR) por lo que soporta los lenguajes de la plataforma .NET.&#160; Está respaldado por extraordinarias herramientas como Visual Studio .NET y Expression Blend.</p>
<p>Silverlight 1.0 nació como “el reproductor de medios de Microsoft” y/o como “el competidor de Flash para la creación de animaciones”.&#160; Hoy es día que estos estigmas siguen estando presentes en la <strong>percepción</strong> de muchas personas, medios e incluso empleados de Microsoft.</p>
<p>Posteriormente, con Silverlight 2, la promesa <em>era</em> algo así:</p>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/08/Silverlight-en-un-inicio.jpg"><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="Silverlight en un inicio" border="0" alt="Silverlight en un inicio" src="http://rdiazconcha.com/wp-content/uploads/2011/08/Silverlight-en-un-inicio_thumb.jpg" width="504" height="379" /></a></p>
<p>Pero debido a la tracción que tuvo HTML 5 (excelente decisión) para ser la tecnología para la Web (y sumándole a que Apple decidió no soportar Flash y/o Silverlight en iOS) hubo un “<a href="http://www.zdnet.com/blog/microsoft/microsoft-our-strategy-with-silverlight-has-shifted/7834" target="_blank">cambio de estrategia</a>” o como decimos en el medio el “BogMu-gate”.&#160; Esta declaración ambigua y confusa (que no debe extrañar a nadie que conozca el medio informático) ayudó a oscurecer aún más la percepción que indiqué arriba.</p>
<p>Sin embargo, <strong>hace completamente sentido</strong> que <a href="http://silverlight.net" target="_blank">Silverlight</a> no se tome como un reemplazo de HTML –porque nunca ese ha sido su objetivo-, y además que se apoye completamente el estándar HTML 5 como lenguaje para la Web.&#160; <strong>¿Quién no quiere que su página o sitio se vea correctamente en cualquier dispositivo y navegador!?</strong> Hey, incluso aplicaciones Web también en algunos escenarios sería adecuado crearlos con HTML 5! (¿conoces <a href="http://skydrive.live.com" target="_blank">SkyDrive</a>?).&#160; En un mundo en donde hay más dispositivos móviles que equipos de cómputo de escritorio, hace completamente sentido estandarizar la manera en la que se presenta la información.</p>
<p><a href="http://silverlight.net" target="_blank">Silverlight</a> es una extraordinaria tecnología para la creación de Aplicaciones, principalmente de Negocios para el sistema operativo Windows y Mac OS.&#160; Ese es su enfoque desde la versión 3.&#160; Aplicaciones altamente funcionales, robustas y –con patrones de arquitectura adecuados- de fácil mantenimiento, flexibles, que aprovechen todo el poder de cómputo local y de la nube y que puedan ser construidos con herramientas y lenguajes modernos.&#160; Aplicaciones que puedan ejecutar tal y como ejecutan las aplicaciones de escritorio hoy en día.</p>
<p>Personalmente, estoy involucrado en varios proyectos actualmente, en producción, que han sido bastante exitosos gracias a la plataforma de desarrollo de Silverlight, y que según su contexto no hacía sentido hacerlos con HTML 5 y que además, de hacerlo, se hubieran tardado mucho más tiempo del planeado.</p>
<h2>¿Entonces?</h2>
<h4>¿Qué usar HTML o Silverlight?</h4>
<p>¡Depende de qué necesites tú o tu cliente! ¿Funcionalidad? ¿Alcance? ¿Ambos? ¿En qué tecnologías tienes experiencia? ¿En cuáles lenguajes tienes experiencia?&#160; Por ejemplo, <u>si quieres hacer una página Web o sitio Web: no hay duda, HTML es y será el camino a seguir</u>!&#160; Para muestra, un botón: este blog usa <a href="http://wordpress.org" target="_blank">WordPress</a>, que está hecho con <a href="http://php.net" target="_blank">PHP</a> y –para mí- es el mejor motor de blogging del mundo.&#160; Punto.&#160; Yo jamás construiría mi blog usando Silverlight o Flash, ya que resultaría contraproducente al no poder leerlo en, por ejemplo, el iPad 2.&#160; Pero por otro lado, si mi cliente requiere una aplicación, altamente funcional, robusta, flexible, de fácil mantenimiento, reutilizando código existente de .NET… probablemente Silverlight será mi primera opción.</p>
<blockquote><p>Recuerda, no hay solo <em>blanco </em>o <em>negro</em>, sino una <em>gama infinita de grises.</em></p>
</blockquote>
<p>Esto es para mí, el escenario actual:</p>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/08/HTML5-vs-Silverlight.jpg"><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="HTML5 vs Silverlight" border="0" alt="HTML5 vs Silverlight" src="http://rdiazconcha.com/wp-content/uploads/2011/08/HTML5-vs-Silverlight_thumb.jpg" width="504" height="379" /></a></p>
<p>Obviamente, faltan en ese diagrama más tecnologías.&#160; ¿En donde posicionarías tu tecnología favorita o la que más usas actualmente?</p>
<h4>Según ______________, HTML 5 reemplazará Silverlight (y Flash, y .NET, y Java….)</h4>
<p>No creo que eso suceda en muchos años por venir.&#160; Te sugiero:</p>
<p>1. Cuestiona todo comentario impreso o verbal</p>
<p>2. Investiga y aprende.&#160; Usa la tecnología.</p>
<p>3. Regresa al punto #1</p>
<p>Creo que la misma sentencia la podríamos formular: <em>HTML 5 reemplazará a Objective-C/Cocoa/MonoTouch para la construcción de aplicaciones en iOS</em>.&#160; ¿Hace sentido esto?</p>
<h4>Según ______________, a partir de Windows 8, todas las aplicaciones ahora serán construidas con HTML 5 y Javascript.</h4>
<p>HTML 5 y Javascript serán <em>una opción más</em> para construir aplicaciones, según lo mencionado por Microsoft.</p>
<p>Microsoft es una empresa ENORME de tamaño, que está constituida a su vez, por “empresas” más chicas y todas ellas buscan sostenerse y justificar su existencia.&#160; Algunos proyectos han fracasado, otros permanecen y permanecerán.&#160; Otros se transformarán y evolucionarán.</p>
<p>Todo el futuro de la plataforma de Windows 8, será dada a conocer públicamente en durante el evento <a href="http://www.buildwindows.com/" target="_blank">//Build/</a> que se llevará a cabo del <strong>13 al 16 de Septiembre 2011</strong>.&#160; La información está <strong>cerrada</strong> y hay voto de silencio hasta el evento.&#160; ¿No podrás asistir al Build? No te preocupes, las sesiones estarán disponibles un día después (no sé si todas o solo el keynote).</p>
<h2>Conclusiones</h2>
<p>Usa la tecnología que más se adecúe a las necesidades de tu proyecto.&#160; Todas tienen pros y contras; no existe la tecnología perfecta y tampoco solo blanco o negro.&#160; Hay mucho qué aprender pero los días solo tienen 24 horas, da prioridad a lo que verdaderamente importa.</p>
<p>Salu2!!!!!!!!!!!!</p>
<p><font size="1"><strong></strong></font></p>
<p><font size="1"><strong>Notas</strong></font></p>
<p><font size="1">La foto de la navaja suiza no es mía, </font><a href="http://www.flickr.com/photos/xjara69/3387985048/" target="_blank"><font size="1">la tomé de esta página</font></a><font size="1">.</font></p>
<p><font size="1">La foto de las llaves no es mía, </font><a href="http://www.flickr.com/photos/ladydragonflyherworld/4299545622/sizes/m/in/photostream/" target="_blank"><font size="1">la tomé de esta página</font></a><font size="1">.</font></p>
]]></content:encoded>
			<wfw:commentRss>http://rdiazconcha.com/2011/08/navajas-o-llaves/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Accediendo a tus ensamblados de .NET desde Silverlight&#8211;Parte 2</title>
		<link>http://rdiazconcha.com/2011/07/accediendo-a-tus-ensamblados-de-net-desde-silverlightparte-2/</link>
		<comments>http://rdiazconcha.com/2011/07/accediendo-a-tus-ensamblados-de-net-desde-silverlightparte-2/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 02:57:42 +0000</pubDate>
		<dc:creator>Rodrigo</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Silverlight 4]]></category>
		<category><![CDATA[Silverlight 5]]></category>
		<category><![CDATA[AutomationFactory]]></category>
		<category><![CDATA[interop]]></category>

		<guid isPermaLink="false">http://rdiazconcha.com/?p=1220</guid>
		<description><![CDATA[En el artículo anterior, vimos el uso de la clase AutomationFactory para poder crear objetos de tus ensamblados creados con el .NET Framework 4.0, y utilizarlos en Silverlight.
En el ejemplo, invocamos un método como cualquier otro y efectivamente obtenemos los resultados esperados, en este caso, la lista de unidades lógicas del equipo del usuario en [...]]]></description>
			<content:encoded><![CDATA[<p>En el <a href="http://rdiazconcha.com/2011/07/accediendo-a-tus-ensamblados-de-net-desde-silverlight/" target="_blank">artículo anterior</a>, vimos el uso de la clase <a href="http://msdn.microsoft.com/es-es/library/system.runtime.interopservices.automation.automationfactory%28v=vs.95%29.aspx" target="_blank">AutomationFactory</a> para poder crear objetos de tus ensamblados creados con el .NET Framework 4.0, y utilizarlos en Silverlight.</p>
<p>En el ejemplo, invocamos un método como cualquier otro y efectivamente obtenemos los resultados esperados, en este caso, la lista de unidades lógicas del equipo del usuario en donde está ejecutando la aplicación.&#160; Pero ¿qué pasaría si necesitáramos manejar un evento que es disparado por el componente (tu ensamblado) de .NET?&#160; En este caso la implementación debe cumplir con ciertos requisitos.</p>
<h3>Atributo ComSourceInterfacesAttribute</h3>
<p>Para que podamos exponer un evento en nuestro ensamblado, y que pueda ser manejado por la aplicación de Silverlight a través de automatización, debemos marcar nuestra clase que implementa el evento con el atributo <a href="http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.comsourceinterfacesattribute.aspx" target="_blank">ComSourceInterfacesAttribute</a>, el cual indica una lista de interfaces que contienen los eventos a exponer en dicha clase.</p>
<p>Por lo tanto, en nuestro proyecto necesitamos crear una inteface que tenga la signatura del evento que deseamos exponer y disparar en la clase.&#160; Asimismo, esta inteface debe ser de tipo IDispatch.</p>
<p>En el proyecto, he agregado la interface IInformacion, con la siguiente implementación:</p>
<pre class="csharpcode">[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[ComVisible(<span class="kwrd">true</span>)]
<span class="kwrd">public</span> <span class="kwrd">interface</span> IInformacion
{
    <span class="kwrd">void</span> OnGetLogicalDrivesInfo(<span class="kwrd">int</span> count);
}</pre>
<style type="text/css">
.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; }</style>
<p>El método OnGetLogicalDrivesInfo incluye como argumento un int que tendrá el conteo de cuántas unidades físicas han sido encontradas.</p>
<p>Una vez implementada la interface, la clase Informacion la decoramos con el atributo ComSourceInterfacesAttribute, indicando el tipo de interface que la clase expone, en este caso la interface IInformacion que creamos anteriormente:</p>
<pre class="csharpcode">[ComSourceInterfaces(<span class="kwrd">typeof</span>(IInformacion))]
[ComVisible(<span class="kwrd">true</span>)]
<span class="kwrd">public</span> <span class="kwrd">class</span> Informacion
{
...
}</pre>
<style type="text/css">
.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; }</style>
<p>Ahora bien, debemos implementar un delegado que empate la signatura del método incluido en la interface IINotificacion, y un evento que esté basado en dicho delegado.&#160; Será este evento que el que dispararemos dentro de la clase Notificacion.</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">delegate</span> <span class="kwrd">void</span> GetLogicalDrivesInfoEventHandler(<span class="kwrd">int</span> count);

<span class="kwrd">public</span> <span class="kwrd">event</span> GetLogicalDrivesInfoEventHandler OnGetLogicalDrivesInfo;</pre>
<style type="text/css">
.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; }</style>
<p>&#160;</p>
<p>Finalmente, disparamos el evento adecuadamente.&#160; Esto lo estoy haciendo dentro del método GetLogicalDrivesInfo() una vez cargada la lista de unidades lógicas.</p>
<pre class="csharpcode"><span class="kwrd">if</span> (OnGetLogicalDrivesInfo != <span class="kwrd">null</span>)
{
    OnGetLogicalDrivesInfo(result.Count);
}</pre>
<p>&#160;</p>
<p>El ensamblado está listo para recompilarse y re-registrarse.</p>
<h3>Clase AutomationEvent</h3>
<p>Del lado de la aplicación de <a href="http://silverlight.net" target="_blank">Silverlight</a>, necesitamos manejar el evento expuesto por el componente: les presento la clase <a href="http://msdn.microsoft.com/es-es/library/system.runtime.interopservices.automation.automationevent%28v=VS.95%29.aspx" target="_blank">AutomationEvent</a>.</p>
<p>La clase <a href="http://msdn.microsoft.com/es-es/library/system.runtime.interopservices.automation.automationevent%28v=VS.95%29.aspx" target="_blank">AutomationEvent</a> representa un evento de automatización.&#160; Necesitamos obtener una referencia del evento OnGetLogicalDrivesInfo, el cual disparará el componente de .NET una vez que hayamos obtenido la lista de todas las unidades lógicas.&#160; Esto lo podemos hacer a través del método GetEvent() de la clase AutomationFactory, indicando primeramente el objeto que incluye el evento, seguido del nombre del evento como tal.&#160; El método GetEvent() nos regresará un objeto de tipo AutomationEvent.</p>
<p>La clase <a href="http://msdn.microsoft.com/es-es/library/system.runtime.interopservices.automation.automationevent%28v=VS.95%29.aspx" target="_blank">AutomationEvent</a> incluye un evento llamado EventRaised, el cual es disparado como resultado del evento del componente.&#160; En los argumentos del evento EventRaised podremos obtener la lista de argumentos originales.&#160; El siguiente código muestra el manejo del evento OnGetLogicalDrivesInfo, el cual una vez manejado obtenemos el conteo del total de unidades lógicas leídas.</p>
<pre class="csharpcode">dynamic obj = AutomationFactory.CreateObject(<span class="str">&quot;Utilerias.Informacion&quot;</span>);

AutomationEvent ev = AutomationFactory.GetEvent(obj, <span class="str">&quot;OnGetLogicalDrivesInfo&quot;</span>);
ev.EventRaised += (s, a) =&gt;
{
    MessageBox.Show(<span class="kwrd">string</span>.Format(<span class="str">&quot;Total de unidades: {0}&quot;</span>, a.Arguments[0]));
};</pre>
<style type="text/css">
.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; }</style>
<p>&#160;</p>
<p>Al ejecutar la aplicación con los cambios que hemos implementado, podremos obtener el valor del argumento del evento que se ha disparado.</p>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/07/SNAGHTML73c811.png"><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="SNAGHTML73c811" border="0" alt="SNAGHTML73c811" src="http://rdiazconcha.com/wp-content/uploads/2011/07/SNAGHTML73c811_thumb.png" width="172" height="154" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://rdiazconcha.com/2011/07/accediendo-a-tus-ensamblados-de-net-desde-silverlightparte-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Accediendo a tus ensamblados de .NET desde Silverlight</title>
		<link>http://rdiazconcha.com/2011/07/accediendo-a-tus-ensamblados-de-net-desde-silverlight/</link>
		<comments>http://rdiazconcha.com/2011/07/accediendo-a-tus-ensamblados-de-net-desde-silverlight/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 18:57:52 +0000</pubDate>
		<dc:creator>Rodrigo</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Silverlight 4]]></category>
		<category><![CDATA[Silverlight 5]]></category>
		<category><![CDATA[AutomationFactory]]></category>
		<category><![CDATA[interop]]></category>

		<guid isPermaLink="false">http://rdiazconcha.com/2011/07/accediendo-a-tus-ensamblados-de-net-desde-silverlight/</guid>
		<description><![CDATA[El BCL (Biblioteca de Clases Base, por sus siglas en inglés) de Silverlight está reducido a comparación del BCL del .NET Framework completo que tenemos instalado en nuestros equipos, por lo que la funcionalidad no es la misma en un aplicativo de Silverlight que alguno construido con el .NET Framework completo.
No obstante, a partir de [...]]]></description>
			<content:encoded><![CDATA[<p>El BCL (Biblioteca de Clases Base, por sus siglas en inglés) de Silverlight está reducido a comparación del BCL del .NET Framework completo que tenemos instalado en nuestros equipos, por lo que la funcionalidad no es la misma en un aplicativo de Silverlight que alguno construido con el .NET Framework completo.</p>
<p>No obstante, a partir de Silverlight 4, es posible que las aplicaciones de Silverlight sean clientes de automatización cuando ejecutan en Confianza Elevada, esto es, poder invocar los servidores de automatización registrados en el sistema operativo Windows.&#160; Generalmente, la mayoría de ejemplos que podemos encontrar en la Web al respecto de esta característica van por el lado de invocar los servidores de automatización de Office (Outlook.Application o Excel.Application por ejemplo), pero ¿qué sucede si necesitamos invocar funcionalidad ya construida en alguno de nustros ensamblados que hayamos escrito en .NET 4.0?</p>
<h3>Ensamblado</h3>
<p>En esta solución crearemos dos proyectos, uno de tipo Class Library del .NET Framework 4.0 y otro proyecto será la aplicación de Silverlight.</p>
<p>En el proyecto de la Biblioteca de Clases escribiremos la funcionalidad para obtener la información de todas las unidades lógicas del equipo.&#160; Tradicionalmente, esto lo podemos lograr por medio de la clase DriveInfo del espacio de nombres System.IO, pero justamente esa es una de las clases que <u>no</u> está en el BCL de Silverlight, por lo que crearemos un ensamblado de .NET 4.0 que regrese esa información, y la usaremos en un aplicativo de Silverlight.</p>
<p>La clave para lograr esto es abrir las propiedades del proyecto de la Biblioteca de Clases y seleccionar la opción “Register for COM interop” para poder exponer este ensamblado a través de COM.</p>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/07/image3.png"><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="image" border="0" alt="image" src="http://rdiazconcha.com/wp-content/uploads/2011/07/image_thumb1.png" width="504" height="148" /></a></p>
<p>En el proyecto agregaremos una clase llamada DriveInfo, la cual tendrá las propiedades Name, DriveFormat, TotalSize y TotalFreeSpace de la siguiente manera:</p>
<div class="csharpcode">
<pre class="alt">[ComVisible(<span class="kwrd">true</span>)]</pre>
<pre><span class="kwrd">public</span> <span class="kwrd">class</span> DriveInfo</pre>
<pre class="alt">{</pre>
<pre>    <span class="kwrd">public</span> <span class="kwrd">string</span> Name { get; set; }</pre>
<pre class="alt">    <span class="kwrd">public</span> <span class="kwrd">string</span> DriveFormat { get; set; }</pre>
<pre>    <span class="kwrd">public</span> <span class="kwrd">long</span> TotalSize { get; set; }</pre>
<pre class="alt">    <span class="kwrd">public</span> <span class="kwrd">long</span> TotalFreeSpace { get; set; }</pre>
<pre>}</pre>
</div>
<style type="text/css">
.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; }</style>
<p>Nota cómo se está decorando la clase con el atributo <a href="http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.comvisibleattribute.aspx" target="_blank">ComVisibleAttribute</a>.&#160; Este atributo indica que este tipo estará disponible a través de COM.</p>
<p>Adicionalmente a esto, agregaremos una clase llamada Información.cs, la cual tendrá el método <strong>GetLogicalDrivesInfo()</strong> para regresar la información de todas las unidades lógicas del equipo del usuario.&#160; También he agregado el método <strong>GetLogicalDrives()</strong> para obtener únicamente el nombre de todas las unidades lógicas.&#160; De hecho, también podríamos agregar cualquier funcionalidad necesaria que utilice el .NET Framework 4.0 (métodos, propiedades y eventos).&#160; El siguiente fragmento de código muestra la implementación de la clase Informacion.cs.&#160;&#160; Nota cómo también se está decorando con el atributo <a href="http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.comvisibleattribute.aspx" target="_blank">ComVisibleAttribute</a>.</p>
<pre class="csharpcode">[ComVisible(<span class="kwrd">true</span>)]
<span class="kwrd">public</span> <span class="kwrd">class</span> Informacion
{
    <span class="kwrd">public</span> DriveInfo[] GetLogicalDrivesInfo()
    {

        var result = <span class="kwrd">new</span> List&lt;DriveInfo&gt;();
        var drives = System.IO.DriveInfo.GetDrives();

        <span class="kwrd">foreach</span> (var item <span class="kwrd">in</span> drives)
        {
            <span class="kwrd">if</span> (<span class="kwrd">true</span>)
            {
                result.Add(<span class="kwrd">new</span> DriveInfo()
                {
                    Name = item.Name,
                    DriveFormat = item.IsReady ? item.DriveFormat : <span class="kwrd">string</span>.Empty,
                    TotalFreeSpace = item.IsReady ? item.TotalFreeSpace : 0,
                    TotalSize = item.IsReady ? item.TotalSize : 0
                });
            }
        }

        <span class="kwrd">return</span> result.ToArray();
    }

    <span class="kwrd">public</span> <span class="kwrd">string</span>[] GetLogicalDrives()
    {
        <span class="kwrd">return</span> System.Environment.GetLogicalDrives();
    }
}</pre>
<p>&#160;</p>
<p>Gracias a la opción que habilitamos en las propiedades del proyecto de Silverlight, al compilar el ensamblado este será registrado en el registro de la máquina local con un progID del tipo <em>EspacioDeNombres.Clase</em>, en este caso Utilerias.Información.&#160; Para hacer esto manualmente podrías utilizar la utilería regasm.exe, cuando quisieras registrar el ensamblado en los equipos de tus usuarios.</p>
<blockquote>
<p>Nota: necesitarás ejecutar Visual Studio .NET como Administrador, para que al momento de compilar el tipo sea registrado adecuadamente en el Registro de tu equipo.</p>
</blockquote>
<h3>Proyecto de Silverlight</h3>
<p>Del lado del proyecto de Silverlight utilizaremos la clase AutomationFactory y su método CreateObject() para poder crear una referencia al componente con progID Utilerias.Información registrado previamente.</p>
<p>Además de esto, crearemos una clase DriveInfo.cs, igual a la que creamos en el proyecto de la Biblioteca de Clases.&#160; Esto para poder crear un DataTemplate adecuado al presentar la información de las unidades lógicas en un ListBox.</p>
<pre class="csharpcode"><span class="kwrd">if</span> (AutomationFactory.IsAvailable)
{
    dynamic obj = AutomationFactory.CreateObject(<span class="str">&quot;Utilerias.Informacion&quot;</span>);

    var drives = obj.GetLogicalDrivesInfo();

    var result = <span class="kwrd">new</span> List&lt;DriveInfo&gt;();

    <span class="kwrd">foreach</span> (var item <span class="kwrd">in</span> drives)
    {
        var driveInfo = <span class="kwrd">new</span> DriveInfo();
        driveInfo.Name = item.Name;
        driveInfo.TotalFreeSpace = item.TotalFreeSpace;
        driveInfo.TotalSize = item.TotalSize;
        driveInfo.DriveFormat = item.DriveFormat;

        result.Add(driveInfo);
    }

    <span class="kwrd">if</span> (result.Count &gt; 0)
    {
        listBox1.ItemsSource = result;
    }
}</pre>
<p>&#160;</p>
<p>Nota el uso de los tipos dinámicos (palabra clave dynamic).&#160; Debido a que se basan en Late Binding, no tendremos Intellisense para poder conocer los miembros del tipo en cuestión, por lo que es importante que los nombres correspondan correctamente.</p>
<p>Finalmente, al probar la aplicación te podrás dar cuenta que efectivamente tu aplicación de Silverlight utiliza el ensamblado Utilerias.dll que creamos en el primer paso, usando el .NET Framework 4.0 completo.&#160; A través de AutomationFactory lo accedemos y obtenemos la información de todas las unidades lógicas del equipo.</p>
<p><a href="http://rdiazconcha.com/wp-content/uploads/2011/07/SNAGHTMLf179f45.png"><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="SNAGHTMLf179f4[5]" border="0" alt="SNAGHTMLf179f4[5]" src="http://rdiazconcha.com/wp-content/uploads/2011/07/SNAGHTMLf179f45_thumb.png" width="504" height="411" /></a></p>
<p>Toma en cuenta que el ensamblado que vayas a utilizar, deberá estar registrado previamente en la máquina del usuario (utiliza regasm.exe), de lo contrario AutomationFactory.CreateObject() arrojará una excepción.&#160; Probablemente necesitarás un instalador de prerequisitos antes de instalar y/o ejecutar la aplicación de Silverlight en Confianza Elevada.</p>
<p>¡Espero que les sea de utilidad!</p>
]]></content:encoded>
			<wfw:commentRss>http://rdiazconcha.com/2011/07/accediendo-a-tus-ensamblados-de-net-desde-silverlight/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tutoriales de Desarrollo para Windows Phone&#8211;totalmente en espa&#241;ol y gratuitos</title>
		<link>http://rdiazconcha.com/2011/06/tutoriales-de-desarrollo-para-windows-phonetotalmente-en-espaol-y-gratuitos/</link>
		<comments>http://rdiazconcha.com/2011/06/tutoriales-de-desarrollo-para-windows-phonetotalmente-en-espaol-y-gratuitos/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 20:09:12 +0000</pubDate>
		<dc:creator>Rodrigo</dc:creator>
				<category><![CDATA[Cursos]]></category>
		<category><![CDATA[La Liga Silverlight]]></category>
		<category><![CDATA[MVP]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[capacitación]]></category>
		<category><![CDATA[curso]]></category>
		<category><![CDATA[entrenamiento]]></category>
		<category><![CDATA[formación]]></category>
		<category><![CDATA[latam]]></category>
		<category><![CDATA[XAML]]></category>

		<guid isPermaLink="false">http://rdiazconcha.com/2011/06/tutoriales-de-desarrollo-para-windows-phonetotalmente-en-espaol-y-gratuitos/</guid>
		<description><![CDATA[En La Liga Silverlight, hemos traducido al idioma español el contenido original de todos los tutoriales para el desarrollo de aplicaciones en Windows Phone, disponibles en App Hub.&#160; 
¡Son un total de 27 tutoriales!
Este material de entrenamiento completamente gratuito y en español te servirá para iniciar en el mundo de la programación de la nueva [...]]]></description>
			<content:encoded><![CDATA[<p align="left"><a href="http://create.msdn.com/en-us/education/quickstarts" target="_blank"><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="windowsphone_logo" border="0" alt="windowsphone_logo" align="right" src="http://rdiazconcha.com/wp-content/uploads/2011/06/windowsphone_logo.png" width="177" height="62" /></a>En <a href="http://blogs.LigaSilverlight.com" target="_blank">La Liga Silverlight</a>, hemos traducido al idioma español el contenido original de <strong>todos los tutoriales para el desarrollo de aplicaciones en Windows Phone</strong>, disponibles en <a href="http://create.msdn.com/en-us/education/quickstarts" target="_blank">App Hub</a>.&#160; </p>
<p align="left">¡Son un total de 27 tutoriales!</p>
<p>Este material de <strong>entrenamiento completamente gratuito y en español</strong> te servirá para<a title="La Liga Silverlight - La Primera Comunidad MSDN en español acerca de Silverlight y tecnologías relacionadas" href="http://blogs.ligasilverlight.com/tutoriales-windows-phone-7/" target="_blank"><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="LigaSilverlight150x150" border="0" alt="LigaSilverlight150x150" align="right" src="http://rdiazconcha.com/wp-content/uploads/2011/06/LigaSilverlight150x150.png" width="133" height="150" /></a> iniciar en el mundo de la programación de la nueva versión del sistema operativo móvil de Microsoft: <a href="http://www.windowsphone7.com" target="_blank">Windows Phone 7</a>, o si ya eres desarrollador para este dispositivo estos tutoriales sin duda alguna te ayudarán a reforzar tus conocimientos.</p>
<p>Cada tutorial trata un tema específico, por lo que no están vinculados directamente uno con otro pero definitivamente les recomiendo que los sigan en el orden establecido.&#160; Los tutoriales comienzan con temas básicos de XAML y <a href="http://silverlight.net" target="_blank">Silverlight</a>, y posteriormente se van analizando conceptos más a detalle acerca de esta plataforma de desarrollo.</p>
<p>La lista completa de tutoriales es la siguiente:</p>
<h3>Iniciando y Fundamentos</h3>
<ol>
<li><font style="background-color: #ffffff"><a title="http://blogs.ligasilverlight.com/2011/06/empezar-a-crear-una-aplicacin-de-windows-phone/" href="http://blogs.ligasilverlight.com/2011/06/empezar-a-crear-una-aplicacin-de-windows-phone/" target="_blank">Empezar a crear una aplicación de Windows Phone</a></font></li>
<li><font style="background-color: #ffffff"><a title="Creando la interfaz de usuario de Windows Phone (XAML)" href="http://blogs.ligasilverlight.com/2011/06/creando-la-interfaz-de-usuario-de-windows-phone-xaml/" target="_blank">Creando la interfaz de usuario de Windows Phone (XAML)</a></font></li>
<li><font style="background-color: #ffffff"><a title="Usando controles" href="http://blogs.ligasilverlight.com/2011/06/usando-controles-3/" target="_blank">Usando controles</a></font></li>
<li><font style="background-color: #ffffff"><a title="Tipo de Controles" href="http://blogs.ligasilverlight.com/2011/06/tipo-de-controles/" target="_blank">Tipo de Controles</a></font></li>
<li><font style="background-color: #ffffff"><a title="Controles Panorama y Pivot" href="http://blogs.ligasilverlight.com/2011/06/controles-panorama-y-pivot/" target="_blank">Controles Panorama y Pivot</a></font></li>
<li><font style="background-color: #ffffff"><a title="Trabajando con texto en Windows Phone" href="http://blogs.ligasilverlight.com/2011/06/trabajando-con-texto-en-windows-phone/" target="_blank">Trabajando con texto en Windows Phone</a></font></li>
<li><font style="background-color: #ffffff"><a title="Distribución en la pantalla" href="http://blogs.ligasilverlight.com/2011/06/distribucin-en-la-pantalla/" target="_blank">Distribución en la pantalla</a></font></li>
<li><font style="background-color: #ffffff"><a title="Orientaciones de la pantalla" href="http://blogs.ligasilverlight.com/2011/06/orientaciones-de-la-pantalla/" target="_blank">Orientaciones de la pantalla</a></font></li>
<li><font style="background-color: #ffffff"><a title="Entrada táctil" href="http://blogs.ligasilverlight.com/2011/06/entrada-tctil/" target="_blank">Entrada táctil</a></font></li>
<li><font style="background-color: #ffffff"><a title="Navegación" href="http://blogs.ligasilverlight.com/2011/06/navegacin/" target="_blank">Navegación</a></font></li>
<li><font style="background-color: #ffffff"><a title="Ejecutando un aplicación en segundo plano (tombstoning)" href="http://blogs.ligasilverlight.com/2011/06/ejecutando-una-aplicacin-en-segundo-plano-tombstoning/" target="_blank">Ejecutando un aplicación en segundo plano (tombstoning)</a></font></li>
<li><font style="background-color: #ffffff"><a title="Notificaciones de empuje para el desarrollo de Windows Phone" href="http://blogs.ligasilverlight.com/2011/06/notificaciones-de-empuje-para-el-desarrollo-de-windows-phone/" target="_blank">Notificaciones de empuje para el desarrollo de Windows Phone</a></font></li>
<li><font style="background-color: #ffffff"><a title="Publicando tu aplicación en el Marketplace" href="http://blogs.ligasilverlight.com/2011/06/publicando-tu-aplicacin-en-el-marketplace/" target="_blank">Publicando tu aplicación en el Marketplace</a></font></li>
</ol>
<h3>Visuales y Medios</h3>
<ol>
<li><font style="background-color: #ffffff"><a title="Imágenes" href="http://blogs.ligasilverlight.com/2011/06/imgenes/" target="_blank">Imágenes</a></font></li>
<li><font style="background-color: #ffffff"><a title="Animaciones" href="http://blogs.ligasilverlight.com/2011/06/animaciones/" target="_blank">Animaciones</a></font></li>
<li><font style="background-color: #ffffff"><a title="Video y Audio" href="http://blogs.ligasilverlight.com/2011/06/video-y-audio/" target="_blank">Video y Audio</a></font></li>
<li><font style="background-color: #ffffff"><a title="Gráficos" href="http://blogs.ligasilverlight.com/2011/06/grficos/" target="_blank">Gráficos</a></font></li>
<li><font style="background-color: #ffffff"><a title="Brochas" href="http://blogs.ligasilverlight.com/2011/06/brochas/" target="_blank">Brochas</a></font></li>
</ol>
<h3>Trabajando con Datos</h3>
<ol>
<li><font style="background-color: #ffffff"><a title="Obteniendo datos en tus aplicaciones de Windows Phone" href="http://blogs.ligasilverlight.com/2011/06/obteniendo-datos-en-tus-aplicaciones-de-windows-phone/" target="_blank">Obteniendo datos en tus aplicaciones de Windows Phone</a></font></li>
<li><font style="background-color: #ffffff"><a title="Enlazando a controles" href="http://blogs.ligasilverlight.com/2011/06/enlazando-datos-a-controles/" target="_blank">Enlazando a controles</a></font></li>
<li><font style="background-color: #ffffff"><a title="Almacenamiento Aislado" href="http://blogs.ligasilverlight.com/2011/06/almacenamiento-aislado/" target="_blank">Almacenamiento Aislado</a></font></li>
<li><font style="background-color: #ffffff"><a title="Accediendo a un servicio web REST" href="http://blogs.ligasilverlight.com/2011/06/accediendo-a-un-servicio-web-rest/" target="_blank">Accediendo a un servicio web REST</a></font></li>
<li><a title="Consumiendo el servicio de datos de Windows Azure utilizando el cliente OData" href="http://blogs.ligasilverlight.com/2011/06/consumiendo-servicio-de-datos-de-windows-azure-utilizando-el-cliente-odata/" target="_blank">Consumiendo el servicio de datos de Windows Azure utilizando el cliente OData</a></li>
</ol>
<h3>Sensores y otras características específicas del teléfono</h3>
<ol>
<li><font style="background-color: #ffffff"><a title="Lanzadores y Selectores" href="http://blogs.ligasilverlight.com/2011/06/lanzadores-y-selectores/" target="_blank">Lanzadores y Selectores</a></font></li>
<li><font style="background-color: #ffffff"><a title="Detección de movimiento (acelerómetro)" href="http://blogs.ligasilverlight.com/2011/06/deteccin-de-movimiento-acelermetro/" target="_blank">Detección de movimiento (acelerómetro)</a></font></li>
<li><font style="background-color: #ffffff"><a title="Desarrollando con el GPS de Windows Phone (servicios de ubicación)" href="http://blogs.ligasilverlight.com/2011/06/desarrollando-con-el-gps-de-windows-phone-servicios-de-ubicacin/" target="_blank">Desarrollando con el GPS de Windows Phone (Servicios de Ubicación)</a></font></li>
<li><font style="background-color: #ffffff"><a title="Desarrollando con la cámara de Windows Phone" href="http://blogs.ligasilverlight.com/2011/06/desarrollando-con-la-cmara-de-windows-phone/" target="_blank">Desarrollando con la cámara de Windows Phone</a></font></li>
</ol>
<p>También pueden ver el índice completo <a href="http://blogs.ligasilverlight.com/tutoriales-windows-phone-7/" target="_blank">en esta página de La Liga Silverlight</a>.</p>
<p>¡Esperamos que les sean de utilidad!</p>
]]></content:encoded>
			<wfw:commentRss>http://rdiazconcha.com/2011/06/tutoriales-de-desarrollo-para-windows-phonetotalmente-en-espaol-y-gratuitos/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

