Featured Posts

Silverlight 5 Ya DisponibleSilverlight 5 Ya Disponible El día de hoy 09 de Diciembre 2011 ha sido liberada la nueva versión de Silverlight 5.  Esta versión final es la 5.0.61118. ¿Qué es Silverlight? Silverlight es...

Readmore

Silverlight Tour–Actualizado a Silverlight 5 RTWSilverlight Tour–Actualizado a Silverlight 5... Tengo el gusto de anunciarles que el Curso que Da La Vuelta al Mundo, el famoso Silverlight Tour, ha sido actualizado a la versión final de Silverlight 5. El Silverlight...

Readmore

Nueva carrera en Microsoft Virtual Academy: Windows Phone 7.1 (Mango)Nueva carrera en Microsoft Virtual Academy: Windows... 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...

Readmore

Nueva carrera en Microsoft Virtual Academy: Silverlight 4Nueva carrera en Microsoft Virtual Academy: Silverlight... ¿Eres estudiante de Microsoft Virtual Academy (MVA)? Tengo el gusto de anunciarles oficialmente el lanzamiento de la nueva carrera de Silverlight 4 para esta plataforma educativa. La...

Readmore

Curso gratuito de Introducción a Silverlight 4 – 2da. ParteCurso gratuito de Introducción a Silverlight... Tengo el gusto de informarles que ya está disponible la segunda parte del Curso gratuito de Introducción a Silverlight 4 en Español, el cual ahora consta de un total...

Readmore

Rodrigo Díaz Concha Rss

Encuesta: Temas para Módulos Avanzados en MVA

Posted on : 03-01-2012 | By : Rodrigo | In : MVP, Silverlight 4, Windows Phone 7.1

Tags: , , , , , ,

0

QuestionEstoy preparando los temas para los módulos avazados de las carreras de Silverlight y Windows Phone en Microsoft Virtual Academy (MVA).  Por este motivo y para poder conocer el interés de los diversos temas que se pueden tocar, he creado las siguientes encuestas, las cuales tienen como objetivo el que me ayuden a conocer qué temas se deberían incluir y que otros, tal vez, no son tan necesarios.

Carrera de Silverlight

 

Carrera de Windows Phone

Las encuestas estarán abiertas durante algunas semanas.  Con esto me ayudarán a definir los temas y posteriormente abrir los nuevos módulos en MVA.

¡Les agradezco de antemano su valiosa colaboración!

Nueva carrera en Microsoft Virtual Academy: Windows Phone 7.1 (Mango)

Posted on : 02-11-2011 | By : Rodrigo | In : MVP, Noticias, Silverlight, Silverlight 4, Windows Phone 7.1

Tags: , , , , , , ,

4

mvaTengo 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 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 deWP-Logo1 desarrollo soportadas es Silverlight 4: una plataforma robusta, moderna y altamente funcional.   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.

La carrera tiene en este momento los siguientes módulos:

Nivel Básico

  • Capítulo I: Fundamentos de Silverlight y Windows Phone
  • Capítulo II: Layout y Entrada Táctil
  • Capítulo III: Visuales y Medios
  • Capítulo IV: Publicación de Aplicaciones

Nivel Intermedio

  • Capítulo V: Trabajando con Datos
  • Capítulo VI: Sensores y otras características especiales del teléfono
  • Capítulo VII: Ciclo de Vida de las Aplicaciones Windows Phone

Al estudiar las diferentes carreras de MVA 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.

Los invito cordialmente a que se registren en esta dirección, estudien la carrera y demuestren sus conocimientos en esta extraordinaria plataforma de desarrollo!

Espero les agrade.

Salu2!

Silverlight para Ninjas–16 y 17 de Noviembre de 2011 | Microsoft Chile

Posted on : 01-11-2011 | By : Rodrigo | In : Cursos, Silverlight 4, Silverlight 5, Windows Phone 7.1

Tags: , , , , , , , , , , ,

0

imagePrevio al TechDays Chile 2011 en donde participaré nuevamente como orador, estaré impartiendo el curso avanzado de Silverlight:  Silverlight para Ninjas los días 16 y 17 de Noviembre 2011 en las oficinas de Microsoft Chile.  Este curso, de duración de 2 días completos, está enfocado a desarrolladores profesionales que ya tienen una experiencia mínima de 6 meses desarrollando aplicaciones con la plataforma de desarrollo de Silverlight.

La información completa a continuación.


Curso Avanzado: Silverlight para Ninjas

Descripción

Contar únicamente con los fundamentos de la plataforma de desarrollo Silverlight no es suficiente para construir Aplicaciones de Negocio robustas, escalables y de fácil mantenimiento.  SilverlightUna noción profunda y detallada de la plataforma es necesaria para poder llevar a otro nivel tus aplicativos desarrollados con esta tecnología.

En este curso aprenderás técnicas y conceptos avanzados de Enlace de Datos, Comunicaciones y el Patrón de Diseño Model-View-ViewModel (MVVM).  Los conceptos que aquí aprendas se pueden emplear en Aplicaciones Windows Phonede Escritorio construidas con Silverlight 4 o 5, y también en aplicaciones para Windows Phone 7.1 (Mango)!

Temario

  • Enlace de Datos Avanzado
  • Comunicaciones y Networking
  • El Patrón de Diseño Model-View-ViewModel (MVVM)
  • Modularización de Aplicaciones con Prism 4.0

Audiencia

Desarrolladores profesionales con experiencia mínima de 6 meses en la plataforma de desarrollo de Silverlight

Costo

500 Dólares Americanos (USD) por participante

Fecha y Horario

16 y 17 de Noviembre 2011

09:00 a 18:00 horas

Lugar

Microsoft Chile

Mariano Sanchez Fontecilla 310 Piso 6

Santiago, Chile

¿Qué llevar?

Nota: Toma en cuenta traer el software en inglés, ya que al día de hoy las herramientas de Silverlight 5 RC solo están disponibles en ese idioma y no pueden ser instaladas si Visual Studio está en español

¿Cuándo debo pagar?

La fecha límite de pago para participar en el curso será el día 16 de Noviembre 2011 a las 9:00 a.m.

¿Cuáles son las formas de pago?

Las formas de pago son:

  • A través de transferencia bancaria internacional (Wire Transfer).  Puedes solicitar este servicio en tu banco.
  • En efectivo, en Dólares Americanos (USD) o el equivalente en Pesos Chilenos.  El pago en efectivo podrá ser en persona el día de inicio del curso

Registro

¡El cupo es limitado! Para registrarte al curso, manda un correo a info@devmasters.com.mx con tu nombre completo tal y como quieres que aparezca en tu Certificado de asistencia.  Te enviaremos por correo la información bancaria en donde podrás pagar el costo total del curso antes de la fecha límite para asegurar tu lugar. Por favor no olvides marcar la dirección info@devmasters.com.mx como dirección segura.

¿Qué incluye?

  • Dos días completos de intenso entrenamiento en Silverlight
  • Material digital completamente en Español
  • Coffee Break

¡Allá nos vemos!

Silverlight para Windows Phone Mango: Fast Application Switching (FAS)

Posted on : 01-11-2011 | By : Rodrigo | In : Silverlight, Silverlight 4, Windows Phone 7.1

Tags: , , , , ,

0

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 Tombstoning.

Este proceso de Tombstoning 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.  Este proceso era sumamente tardado y no brindaba la mejor experiencia de usuario posible.

imageEn Windows Phone Mango se introduce un concepto denominado Fast Application Switching (o FAS, por sus siglas en el idioma inglés).  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.  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.

Propiedad IsApplicationInstancePreserved

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).

La idea detrás de esta propiedad es poder determinar si restauramos el estado de la aplicación o no.  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.

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.  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.  En este caso, el nombre del campo es el mismo pero esto no es necesario.

private void Application_Activated(object sender, ActivatedEventArgs e)
{
    IsApplicationInstancePreserved = e.IsApplicationInstancePreserved;
}

public static bool IsApplicationInstancePreserved;

 

Ya dentro de la página en cuestión, podemos leer el valor de este campo para realizar cualquier tipo de algoritmo relacionado.  En este caso, simplemente estoy mostrando los valores “Dormant” o “Tombstoning” según sea el caso.

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    texto.Text = App.IsApplicationInstancePreserved ? "Dormant" : "Tombstoning";
}

 

La siguiente ilustración, muestra la aplicación de ejemplo corriendo después de haber sido restaurada desde el estado Dormant.

SNAGHTML2a4beba

Resumen

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.  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.

Silverlight para Windows Phone Mango: Bases de Datos locales con SQL Server CE–Parte 2

Posted on : 01-11-2011 | By : Rodrigo | In : Silverlight, Silverlight 4, Windows Phone 7.1

Tags: , , , , , ,

0

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.  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 datos

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).  Esta técnica te permite definir tu modelo por medio de clases y atributos.  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.

Creación de las tablas

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.  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.

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.

El siguiente fragmento de código muestra la declaración de una tabla llamada Persona, la cual tendrá tres columnas: ID, Nombre y Empresa.

[Table]
public class Persona
{
    [Column(IsDbGenerated = true, IsPrimaryKey = true)]
    public int ID { get; set; }

    [Column]
    public string Nombre { get; set; }

    [Column(CanBeNull = true)]
    public string Empresa { get; set; }
}

 

Creación del contexto de datos

El contexto de datos es un objeto que representa a la base de datos.  El contexto de datos contiene las tablas, que a su vez contienen las columnas que definen dicha tabla.

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.  Será en esta clase en donde debemos declarar las tablas que tendrá la base de datos.  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.

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.

public class PersonaDataContext : DataContext
{
    public Table<Persona> Personas;

    public PersonaDataContext(string connectionString) : base(connectionString) { }
}

 

Nota cómo el constructor de esta clase a su vez está invocando el constructor de su clase base.  De esta manera permitiríamos utilizar una u otra cadena de conexión para reutilizar este contexto de datos en diferentes escenarios.

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.

Creación de la base de datos

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.  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.

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.

public class PersonaDatabase
{
    public static PersonaDataContext GetDatabase()
    {
        var context = new PersonaDataContext("isostore:/personas.sdf");

        if (!context.DatabaseExists())
        {
            context.CreateDatabase();
        }

        return context;
    }
}

 

Inserción de datos

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.  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.  Nota el uso del método SubmitChanges(); este método se asegura de finalizar la transacción hacia el motor de base de datos.

private static void CrearDatos()
{
    var db = PersonaDatabase.GetDatabase();
    for (int i = 0; i < 1000; i++)
    {
        db.Personas.InsertOnSubmit(new Persona()
        {
            Nombre = "Persona " + i.ToString(),
            Empresa = "MVA"
        });
    }
    db.SubmitChanges();
}

Consulta de datos

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.  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.  El resultado de la consulta será la fuente de datos para un control ListBox.

private void ConsultarDatos()
{
    var query = from persona in PersonaDatabase.GetDatabase().Personas
                where persona.Nombre.Contains("5")
                orderby persona.ID
                select persona;

    lista.ItemsSource = query.ToList();
}

 

La siguiente ilustración, muestra la aplicación ejecutando y después de haber consultado los datos según el código anterior.

SNAGHTML261447b

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.

Actualización de datos

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.

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.  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:

private void Guardar()
{
    persona.Nombre = txtNombre.Text;
    dataContext.SubmitChanges();
}

 

SNAGHTML284a9e2

Es justamente el método SubmitChanges() el único mecanismo por el cual la base de datos es efectivamente actualizada con los cambios.

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.

Actualización del esquema de la base de datos

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.

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.

Método CreateDatabaseSchemaUpdater

El método CreateDatabaseSchemaUpdater del objeto de contexto de datos nos permite hacer las actualizaciones adecuadas al esquema de la base de datos.  Por ejemplo, el siguiente código agrega una nueva tabla al esquema:

var context = new PersonaDataContext(“isostore:/personas.sdf");
var updater = context.CreateDatabaseSchemaUpdater();
updater.AddTable<Producto>();

O tal vez, quisieras agregar una nueva columna a una tabla ya existente:

updater.AddColumn<Persona>("FechaNacimiento");

 

Finalmente, debemos ejecutar el método Execute() para poder realizar los cambios en el esquema de la base de datos:

updater.Execute();

 

Resumen

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.  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.  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.

Silverlight para Windows Phone Mango: Bases de Datos locales con SQL Server CE–Parte 1

Posted on : 31-10-2011 | By : Rodrigo | In : Silverlight, Silverlight 4, Windows Phone 7.1

Tags: , , , , ,

1

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.  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.

La necesidad de una base de datos local

SNAGHTML20253b5[4]Hay una gran cantidad de escenarios en donde contar con una base de datos relacional es justamente uno de los requerimientos básicos.  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.

SQL Server CE en Windows Phone Mango, cubre precisamente ese requerimiento.  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.  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. 

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.  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.

Mencioné que hay algunas ventajas.  Claro que las hay.  Sin embargo, también hay algunas desventajas:

No se permite Transact-SQL directo

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.  En SQL Server CE para Windows Phone Mango no es posible ejecutar consultar Transact-SQL de manera directa.

image

Lo sé.  Para algunas personas, el no tener que escribir sentencias Transact-SQL de manera manual es más bien, una ventaja Smile

No hay un diseñador visual

imageSi 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.  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.

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?

La respuesta a esa pregunta es LINQ para SQL.

LINQ para SQL

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).  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.  Eso es precisamente el por qué no es necesario ejecutar directamente cláusulas T-SQL hacia nuestras bases de datos de Windows Phone Mango.

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.

LINQ para SQL está implementado solo de manera parcial en Windows Phone Mango.  Para mayor información consulta esta página.

Luego entonces, nuestras aplicaciones deben hacer uso del lenguaje LINQ, para poder realizar las operaciones hacia la base de datos.  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.  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.  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.  Solo es cuestión de acostumbrarse a este paradigma y conocer sus diversas posibilidades.

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.

Silverlight para Windows Phone Mango: Mosaicos Dinámicos

Posted on : 31-10-2011 | By : Rodrigo | In : Silverlight 4, Windows Phone 7.1

Tags: , , , , , , , ,

0

Una de las características nuevas en la plataforma de desarrollo de Silverlight para Windows Phone 7.1 "Mango” es el ofrecer un mecanismo para crear programáticamente mosaicos “vivos”, y que estos sean fácilmente actualizables según ciertas condiciones ya sea mientras la aplicación esté ejecutando o no.

En este artículo veremos a detalle la creación de mosaicos dinámicos o “Live Tiles” (Mosaicos vivos, por su nombre en el idioma inglés), sus características y capacidades.

Mosaicos

Los mosaicos son –dentro del lenguaje de diseño Metro- la manera en la que las aplicaciones pueden ser ejecutadas, pero también el mecanismo por el cual las aplicaciones nos pueden avisar que ha sucedido algo de nuestro interés como usuarios finales.  Windows Phone 7.1 incluye dos tipos diferentes de mosaicos: Mosaicos Principales y Mosaicos Secundarios. 

Mosaicos principales

Por ejemplo, cuando tienes configurada una cuenta de correo electrónico en Windows Phone 7, el mosaico que representa la aplicación de correo electrónico se actualiza dinámicamente cuando llega a nuestro buzón un nuevo mensaje, este es un ejemplo de mosaico principal ya que no tuvimos que hacer nada extra para crearlo, sino que ya lo agrega la aplicación al momento de ser instalada.  Este tipo de mosaicos pueden ser creados automáticamente por la aplicación o a través de código.  Es muy importante mencionar que estos mosaicos no pueden ser anclados al menú de inicio automáticamente, sino que el usuario lo debe hacer manualmente.image

Mosaicos secundarios

Silverlight para Windows Phone 7.1, soporta la creación programática de mosaicos secundarios para las aplicaciones.  Esto es de particular interés cuando nuestra aplicación requiere brindar al usuario diversas maneras de ejecutar la aplicación.  Por ejemplo, cada mosaico secundario podría representar un estado completamente diferente a otro en la aplicación, adicionalmente al mosaico principal que nos sirve para ejecutar el aplicativo en cuestión.

En la ilustración se muestra una aplicación que tiene un mosaico principal con el título “Mi App!”, mientras que el resto de mosaicos son secundarios.

Este tipo de mosaicos pueden ser creados únicamente a través de código, además de que se anclan automáticamente al menú de inicio tan pronto como son creados.

 

Características de los Mosaicos

Todos los mosaicos cuentan con las siguientes características, las cuales pueden ser modificadas según sea necesario:

  • Título frontal
  • Imagen de fondo frontal
  • Contador numérico (valor del 1 al 99. Si no se establece, no aparecerá)
  • Título para el reverso del mosaico
  • Contenido para el reverso del mosaico
  • Imagen del reverso del mosaico

Hablando específicamente de las imágenes de los mosaicos, estas deb ser de tipo PNG o JPG y deben tener un tamaño de 173 x 173 pixeles.  Si la imagen no tiene este tamaño, se escalará automáticamente.  Adicionalmente a esto, los archivos deben estar marcados como “Contenido”, dentro del panel de Propiedades en Visual Studio .NET.

image

Clase ShellTile

La clase ShellTile representa un mosaico de nuestra aplicación –ya sea el principal o alguno de los secundarios.  Esta clase está disponible en el Espacio de Nombres Microsoft.Phone.Shell, por lo que es buena idea incluir una cláusula using (o Imports en Visual Basic) en la parte inicial de nuestro código.

La clase ShellTile incluye dos miembros estáticos importantes: la propiedad ActiveTiles, la cual es un diccionario que representa todos los mosaicos de la aplicación en cuestión, siendo el primero en el diccionario el mosaico principal, y también el método Create(), el cual nos sirve para poder crear mosaicos secundarios.

El siguiente fragmento de código obtiene el mosaico principal de la aplicación.

//Obtiene el mosaico de la aplicación
var main = Microsoft.Phone.Shell.ShellTile.ActiveTiles.First();

 

Clase StandardTileData

Hay una especialización de la clase ShellTile: la clase StandardTileData.  Esta clase representa un mosaico que puede estar anclado al menú de inicio, por lo que puede tener las propiedades que indicamos anteriormente como título fronta y de reverso, imágenes, etc.

El siguiente fragmento de código configura el mosaico principal de la aplicación, tanto para la parte frontal como para la parte trasera.

var appTitle = ShellTile.ActiveTiles.First();

if (appTitle != null)
{
    var tileData = new StandardTileData();

    tileData.Title = "Mi Aplicación";
    tileData.Count = 7;
    tileData.BackgroundImage = new Uri("Imagenes/sl4logo.png", UriKind.Relative);
    tileData.BackContent = "Atrás";
    tileData.BackTitle = "Ejemplo";
    tileData.BackBackgroundImage = new Uri("Imagenes/WPLogo.png", UriKind.Relative);

    appTitle.Update(tileData);
}

 

Al ejecutar el anterior código y al anclar el mosaico al menú de inicio manualmente, veremos el resultado deseado, tal y como se muestra en la siguiente ilustración:

SNAGHTML1cadc82

Es importante mencionar que cuando un mosaico tiene contenido en el reverso y éste está anclado al menú de inicio, automáticamente después de un lapso de tiempo el mosaico gira como si fuera un naipe para mostrar dicho contenido.

Creación de mosaicos secundarios

Para crear mosaicos secundarios, utilizamos el método Create() mencionado anteriormente.  Este método estático es parte de la clase ShellTile y solicita como parámetros la ruta dentro de la aplicación que este mosaico secundario representa, y también un objeto de tipo StandardTileData, con las propiedades visuales necesarias que requiera nuestro nuevo mosaico.

El Proyecto

image

Para probar esta funcionalidad, nuestra aplicación de prueba consta de dos páginas: MainPage.xaml y Nombre.xaml. En MainPage el usuario puede escribir su nombre y pulsar sobre el botón.  Al hacer esto, la aplicación navega hacia Nombre.xaml, pasando como parámetro el nombre escrito en la caja de texto de MainPage.  Aquí, el usuario puede pulsar en el botón “Crear mosaico secundario”, lo cual hará precisamente eso, identificando al nuevo mosaico con ese Uri único.

La siguiente ilustración muestra las dos páginas de la aplicación.

SNAGHTML1ed8da8

Es en el botón “Crear mosaico secundario” en donde está implementado el código para crear un mosaico secundario de la aplicación, tal y como se muestra a continuación.  Nota que lo primero que hace el código es asegurarse que no exista otro mosaico secundario con el mismo Uri.  Posteriormente a eso, se crea un nuevo objeto de tipo StandardTileData con el contenido visual adecuado.

if (ShellTile.ActiveTiles.Where((m) => m.NavigationUri 
   == NavigationService.Source).Count() == 0)
{
    StandardTileData newTile = new StandardTileData()
    {
        Title = nombre,
        Count = 1,
        BackgroundImage = new Uri("Imagenes/sl4logo.png", UriKind.Relative),
        BackTitle = "Mosaico Secundario",
        BackContent = "Creado: " + DateTime.Now.ToString(),
        BackBackgroundImage = new Uri("Imagenes/mva.png", UriKind.Relative)
    };

    ShellTile.Create(NavigationService.Source, newTile);
}

 

Una vez ejecutando la aplicación en el emulador, podemos probar esta funcionalidad creando tantos mosaicos secundarios como queramos.  Es importane mencionar que el mosaico principal de la aplicación no es necesario que esté en el menú de inicio para que los mosaicos secundarios estén anclados.  En la siguiente ilustración se muestran tres mosaicos secundarios creados con esta aplicación de prueba.

 
SNAGHTML1e461f7[4]

 

Resumen

Los mosaicos dinámicos o “Live Tiles” son una de las mejoras que podemos encontrar en Silverlight para Windows Phone Mango.  A través de esta característica podemos brindar a los usuarios de nuestras aplicaciones un mecanismo para poder llegar directamente al contenido que ellos desean, ya que cada mosaico puede representar una ruta diferente de acceso dentro de nuestras aplicaciones.

Nueva carrera en Microsoft Virtual Academy: Silverlight 4

Posted on : 07-09-2011 | By : Rodrigo | In : MVP, Noticias, Silverlight 4

Tags: , , , , , ,

8

mva¿Eres estudiante de Microsoft Virtual Academy (MVA)? Tengo el gusto de anunciarles oficialmente el lanzamiento de la nueva carrera de Silverlight 4 para esta plataforma educativa.

La descripción de la carrera es la siguiente:

Silverlight es una tecnología que nos permite crear silverlight_logoAplicaciones Enriquecidas para Internet o RIA por sus siglas en inglés (Rich Internet Applications). Con Silverlight podemos construir aplicaciones que van desde pequeños componentes dentro de una página Web hasta sofisticadas Aplicaciones de Negocio que estén consumiendo y presentando datos de alguna base de datos, pasando por juegos casuales, reproductores de multimedios, Gadgets para Windows Vista o 7, y un largo etcétera. En esta carrera podrás estudiar de manera estructurada la tecnología Microsoft Silverlight, recorriendo todas las características y herramientas para desarrollar aplicaciones básicas para Web y Plataforma.

La carrera tiene en este momento los siguientes módulos:

Nivel Básico

  • Capítulo I: Fundamentos de Silverlight
  • Capítulo II: Layout en Silverlight
  • Capítulo III: Acceso al Sistema de Archivos
  • Capítulo IV: Publicación de Aplicaciones

Nivel Intermedio

  • Capítulo V: Aplicaciones Fuera del Navegador
  • Capítulo VI: Extendiendo la Funcionalidad
  • Capítulo VII: Enlace de Datos
  • Capítulo VIII: Comunicaciones

Próximamente habrá también Nivel Avanzado ¿qué temas les gustaría ver?  También les comento que si bien todo el material fue hecho con Silverlight 4, todos los conceptos son totaltemente válidos para Silverlight 5.

Les invito cordialmente a que se registren a la carrera, la estudien y desarrollen las habilidades necesarias para crecer como desarrolladores profesionales en esta tecnología.  Les recuerdo que MVA es completamente gratuita y pueden estudiar a su propio ritmo!

Espero les sea de utilidad.

Salu2!

Silverlight para Ninjas–02 de Septiembre 2011 | Microsoft Costa Rica

Posted on : 19-08-2011 | By : Rodrigo | In : Cursos, Silverlight 4, Silverlight 5

Tags: , , , , , , ,

0

image

Como parte de las actividades que se estarán realizando en San José, Costa Rica con motivo del Quinto Simposio Latinoamericano de SharePoint, impartiré un curso privado en las instalaciones de Microsoft Costa Rica el 02 de Septiembre 2011. El curso es el Master Class: Silverlight para Ninjas.  Este curso está enfocado a temas avanzados de arquitectura de aplicaciones de Silverlight, por lo que una experiencia mínima de 6 meses con la plataforma es absolutamente necesaria.

Aquí la información:

Descripción

Contar con los fundamentosSilverlight de la plataforma de desarrollo Silverlight no es suficiente para construir Aplicaciones de Negocio robustas, escalables y de fácil mantenimiento.  Una noción profunda y detallada de la plataforma es necesaria para poder llevar a otro nivel tus aplicativos desarrollados con esta tecnología.

En este curso aprenderás técnicas y conceptos avanzados de Enlace de Datos, Comunicaciones y el Patrón de Diseño Model-Windows PhoneView-ViewModel (MVVM).  ¡Los conceptos que aquí aprendas se pueden emplear en Aplicaciones de Escritorio construidas con Silverlight 4 o 5, y también en aplicaciones de Windows Phone 7  y 7.5!

Temas

  • Enlace de Datos Avanzado
  • Comunicaciones
  • El Patrón de Diseño Model-View-ViewModel (MVVM)
  • … y más!

Audiencia

Desarrolladores profesionales con experiencia mínima de 6 meses en la plataforma de desarrollo de Silverlight

Costo

150 Dólares Americanos (USD) por participante (ó 75.000 Colones Costarricenses)

Fecha y Horario

02 de Septiembre 2011

09:00 a 18:00 horas

Lugar

Microsoft Costa Rica

Oficentro Plaza Roble (frente del Centro Comercial Multiplaza Escazú), Edificio El Patio, Piso 2

Escazú, San José, Costa Rica

¿Qué llevar?

  • 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
  • Visual Studio .NET 2010 en inglés (cualquier edición)
  • Visual Studio .NET 2010 Service Pack 1 en inglés
  • Visual Studio .NET 2010 Tools For Silverlight 5 Beta
  • Expression Blend Preview for Silverlight 5 Beta
  • Prism 4.0
  • Adobe Reader

Para una mejor experiencia, te recomendamos instalar en tu equipo todas las herramientas necesarias usando el Web Platform Installer. Visita http://www.silverlight.net/getstarted para mayor información.

Nota: Toma en cuenta traer el software en inglés, ya que al día de hoy las herramientas de Silverlight 5 Beta solo están disponibles en ese idioma y no pueden ser instaladas si Visual Studio está en español

¿Cuándo debo pagar?

La fecha límite de pago para participar en el curso será el día 02 de Septiembre a las 9:00 am

¿Cuáles son las formas de pago?

Las formas de pago son:

  • A través de transferencia bancaria internacional (Wire Transfer)
  • En efectivo, en Dólares Americanos (USD) o Colones.  El pago deberá ser en persona el día 01 de Septiembre o el día de inicio del curso.

Registro

¡El cupo es limitado! Para registrarte al curso, manda un correo a info@devmasters.com.mx con tu nombre completo tal y como quieres que aparezca en tu Certificado de asistencia.  Te enviaremos por correo la información bancaria en donde podrás pagar el costo total del curso antes de la fecha límite, para asegurar tu lugar. Por favor no olvides marcar la dirección info@devmasters.com.mx como dirección segura.

¿Qué incluye?

  • Un día completo de intenso entrenamiento
  • Material digital completamente en Español
  • Coffee Break
  • Al registrarte a este curso, recibe un 30% de Descuento para asistir al Quinto Simposio Latinoamericano de SharePoint que se llevará a cabo el 31 de Agosto 2011

¡Allá nos vemos!

Quinto Simposio Latinoamericano de SharePoint–31 de Agosto 2011 en Costa Rica

Posted on : 03-08-2011 | By : Rodrigo | In : Comunidades, Conferencias, Eventos, MVP, SharePoint, Silverlight 4, Silverlight 5

Tags: , , , , , , , ,

0

Les invito a todos a que asistan al Quinto (sí, ya el quinto!!!) Simposio Latinoamericano de SharePoint, el cual se llevará a cabo el día 31 de Agosto 2011 en el centro de negocios Pueblo Antiguo, San José, Costa Rica.

Invitacion5SimpsioSharePoint2011

Este evento estará llevado a cabo por profesionales reconocidos MVP_Horizontal_BlueOnlyinternacionalmente en el ámbito de SharePoint y tecnologías relacionadas, muchos de ellos MVP’s.  La agenda está repleta de charlas de bastante interés para todos los gustos.

Esta es una gran oportunidad para tener de primera mano toda la información que ustedes requieran con respecto a esta magnífica plataforma de colaboración, y qué mejor que en la capital Costarricense!?

Por mi parte estaré dando un charla acerca de la construcción y diseño de Aplicaciones de Negocio (en el escritorio) con Silverlight que utilicen datos de SharePoint.  Si tienen algún tópico en específico que quisieran que se tratara durante la charla, ¡háganmelo saber! Me dará mucho gusto obtener su previa retroalimentación.

 

El registro está abierto, por lo que les sugiero ¡no pierdan su lugar!

Toda la información adicional está en la página del Simposio.

 

while (1==1) {

   CostaRica.PuraVida = true;

}

 

¡Allá nos vemos!

Utilizando un escáner desde una aplicación Silverlight

Posted on : 03-08-2011 | By : Rodrigo | In : General, Silverlight 4, Silverlight 5

Tags: , , , ,

2

432532_sri_scanner

Como he mencionado anteriormente aquí y aquí, las aplicaciones de Silverlight pueden ser clientes de automatización, es decir, pueden invocar los servidores de automatización registrados en el sistema operativo Windows de la máquina del usuario.

Un requerimiento bastante común en aplicaciones de negocio es poder utilizar el escáner conectado desde nuestro aplicativo, para poder digitalizar una imagen y posteriormente serializarla a disco y/o presentarla en pantalla, etc.

En sistema operativo Windows contamos con WIA (Windows Image Acquisition), la cual es una plataforma que permite a nuestras aplicaciones interactuar con hardware de imágenes y también estandariza la interacción entre las aplicaciones y los escáneres, es decir, es un común denominador entre el manufacturero del dispositivo y tú como desarrollador.  WIA está presente en Windows desde Windows ME en adelante, y su versión más reciente es la 2.0.

Es importante notar que tu hardware debe ser compatible con WIA para que el código de ejemplo de este artículo funcione.  Revisa la documentación de tu escáner para conocer si existe compatibilidad.

WIA.CommonDialog

El objeto WIA.CommonDialog tiene diferentes métodos que nos ayudan a desplegar las cajas de diálogo para poder seleccionar un dispositivo de imagen, como una cámara o un escáner, y además para escanear una imagen.  Si creamos una referencia a este objeto por medio de la clase AutomationFactory, podemos fácilmente integrar capacidades de escaneo en nuestra aplicación de Silverlight.

El objeto WIA.CommonDialog tiene algunos métodos bastantes interesantes, los cuales se destacan en la siguiente tabla:

ShowSelectDevice Muestra una caja de diálogo para seleccionar el dispositivo que deseamos utilizar, por ejemplo una cámara o un escáner.
ShowDeviceProperties Muestra las propiedades del dispositivo seleccionado en el método ShowSelectDevice
ShowAcquireImage Abre una caja de diálogo para escanear una imagen, usando el dispositivo configurado por default

Por ejemplo, al ejecutar ShowSelectDevice(), se desplegará la siguiente caja de dialogo:

SNAGHTML70d8f39

Nota cómo también se muestran las cámaras conectadas en el equipo.

Para nuestro código utilizaremos el método ShowAcquireImage().  Este método regresa un objeto de tipo WIA.ImageFile, que representa la imagen digitalizada.

El siguiente fragmento de código muestra el uso de este método para desplegar la caja de diálogo para escanear.

using (dynamic commonDialog = AutomationFactory.CreateObject("WIA.CommonDialog"))
{
    dynamic imageFile;

    try
    {
        imageFile = commonDialog.ShowAcquireImage();
    }
    catch (Exception originalException)
    {
        throw new Exception("El scanner no está listo", originalException);
    }

La siguiente ilustración muestra la caja de diálogo después de haber seleccionado la vista previa de la imagen a escanear (en mi caso, la portada de un disco bastante bueno que les recomiendo ampliamente Smile)

SNAGHTML7018e20

Al hacer clic en el botón “Scan”, la imagen será digitalizada.

SNAGHTML700ad62[4]

En este caso, estamos obteniendo la imagen escaneada y la guardamos en la variable llamada imageFile.  No obstante, en este momento la imagen aún no ha sido convertida a algún formato válido.  Para ello podemos utilizar otro objeto: WIA.ImageProcess.

WIA.ImageProcess

El objeto WIA.ImageProcess permite manejar la lista de filtros que deseamos aplicar para una imagen.  Un filtro en el contexto del objeto WIA.ImageProcess es una modificación a un objeto de tipo ImageFile.

En nuestro ejemplo, estamos creando una referencia al objeto WIA.ImageProcess, la cual guardaremos en una variable llamada imageProcess.  Posteriormente, agregamos a la colección de filtros el filtro Convert, el cual nos servirá para convertir el formato de la imagen escaneada a un formato conocido, en este caso JPEG.

El formato JPEG en WIA está representado por el GUID {B96B3CAE-0728-11D3-9D7B-0000F81EF32E}, por lo que es buena idea tenerlo en una variable: la variable wiaFormatJPEG.  Esto se lo indicamos a la propiedad FormatID del filtro Convert y finalmente aplicamos el filtro por medio de la ejecución del método Apply(), pasando como parámetro la imagen original.

using (dynamic imageProcess = AutomationFactory.CreateObject("WIA.ImageProcess"))
{
    imageProcess.Filters.Add(imageProcess.FilterInfos("Convert").FilterID);
    imageProcess.Filters[1].Properties("FormatID").Value = wiaFormatJPEG;
//wiaFormatJPEG es una cadena con el GUID descrito

    try
    {
        dynamic newImageFile = imageProcess.Apply(imageFile);
        //guardar a disco u obtener el Stream
     }
}
     

Ya con la nueva imagen convertida al formato JPEG podríamos obtener el Stream para poder usarlo en un BitmapImage, tal y como lo muestra la siguiente ilustración.

SNAGHTML70007a2

O si quisiéramos guardar la imagen a disco, sería muy sencillo hacer a través del método SaveFile().

string path = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
string fullFileName = string.Format(@"{0}\{1}", path, fileName);
//fileName es el nombre del archivo

if (File.Exists(fullFileName))
    File.Delete(fullFileName);

newImageFile.SaveFile(fullFileName);

En este caso, se guardará la imagen escaneada, en formato JPEG, en la carpeta “My Pictures” de la máquina del usuario.

Accediendo a tus ensamblados de .NET desde Silverlight–Parte 2

Posted on : 27-07-2011 | By : Rodrigo | In : Silverlight, Silverlight 4, Silverlight 5

Tags: , ,

0

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 donde está ejecutando la aplicación.  Pero ¿qué pasaría si necesitáramos manejar un evento que es disparado por el componente (tu ensamblado) de .NET?  En este caso la implementación debe cumplir con ciertos requisitos.

Atributo ComSourceInterfacesAttribute

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 ComSourceInterfacesAttribute, el cual indica una lista de interfaces que contienen los eventos a exponer en dicha clase.

Por lo tanto, en nuestro proyecto necesitamos crear una inteface que tenga la signatura del evento que deseamos exponer y disparar en la clase.  Asimismo, esta inteface debe ser de tipo IDispatch.

En el proyecto, he agregado la interface IInformacion, con la siguiente implementación:

[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[ComVisible(true)]
public interface IInformacion
{
    void OnGetLogicalDrivesInfo(int count);
}

El método OnGetLogicalDrivesInfo incluye como argumento un int que tendrá el conteo de cuántas unidades físicas han sido encontradas.

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:

[ComSourceInterfaces(typeof(IInformacion))]
[ComVisible(true)]
public class Informacion
{
...
}

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.  Será este evento que el que dispararemos dentro de la clase Notificacion.

public delegate void GetLogicalDrivesInfoEventHandler(int count);

public event GetLogicalDrivesInfoEventHandler OnGetLogicalDrivesInfo;

 

Finalmente, disparamos el evento adecuadamente.  Esto lo estoy haciendo dentro del método GetLogicalDrivesInfo() una vez cargada la lista de unidades lógicas.

if (OnGetLogicalDrivesInfo != null)
{
    OnGetLogicalDrivesInfo(result.Count);
}

 

El ensamblado está listo para recompilarse y re-registrarse.

Clase AutomationEvent

Del lado de la aplicación de Silverlight, necesitamos manejar el evento expuesto por el componente: les presento la clase AutomationEvent.

La clase AutomationEvent representa un evento de automatización.  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.  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.  El método GetEvent() nos regresará un objeto de tipo AutomationEvent.

La clase AutomationEvent incluye un evento llamado EventRaised, el cual es disparado como resultado del evento del componente.  En los argumentos del evento EventRaised podremos obtener la lista de argumentos originales.  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.

dynamic obj = AutomationFactory.CreateObject("Utilerias.Informacion");

AutomationEvent ev = AutomationFactory.GetEvent(obj, "OnGetLogicalDrivesInfo");
ev.EventRaised += (s, a) =>
{
    MessageBox.Show(string.Format("Total de unidades: {0}", a.Arguments[0]));
};

 

Al ejecutar la aplicación con los cambios que hemos implementado, podremos obtener el valor del argumento del evento que se ha disparado.

SNAGHTML73c811