domingo, 27 de enero de 2013

Planificando las bases de una aplicación Windows Phone

Hace unos días hice el intento de escribir un artículo de un tema que noto entre los asistentes a talleres o cursos que es un vacío común. Espero que lo que escribí les ayude a enteder un poco más.

El ejemplo es una aplicación de la cual existen varios clientes ya, pero a la que quisiera dar mi enfoque personal y seguirla creciendo, :)

En este punto igual se encuentra la serie de MVVM que inicié alguna vez y que espero terminar pronto.


Espero como siempre que sea de utilidad 
Sorey

lunes, 21 de enero de 2013

Boya.ca - Campus Party

Hola a todos,

Bien, empieza otro buen año, esta vez con la invitación a Boya.ca para hablarles un poco sobre Windows Phone 7.5 y 8 y también sobre Windows 8. 

El escenario será el Centro de Convenciones de Tunja en Boyacá, Colombia, y estaré dando 2 charlas introductorias el día Jueves y un taller práctico el día viernes.

CONFERENCIA: Introducción a Windows Phone. Jueves 7 de febrero a las 10am en el escenario de software
CONFERENCIA: Introducción a Windows 8. Viernes 8 de febrero a las 9am en el escenario de software
TALLER: Desarrollo de Aplicaciones Windows Phone. Jueves 7 de febrero a las 5pm en el escenario de hardware

Si son trasmitidos en linea se los haré saber en mi twitter, por lo pronto espero que algunos de los lectores del blog hayan conseguido invitaciones al evento.

Allá nos vemos!

miércoles, 16 de enero de 2013

Selector de listas largas con el Toolkit de Windows Phone

En algún momento cuando hacemos una aplicación que tiene una larga lista de datos desde la que el usuario debe tomar solo un valor, recordamos el caracteristico panel del letras del menú de aplicaciones de Windows Phone, que se vé más o menos asi:


Imagen de Nick Randolph

Pues bien, este control no está por defecto para Windows Phone, pero si está disponible en NuGet. Instalar en nuestro proyecto es así de facil.

Primero crea tu aplicación y en el menú secundario en la cabecera del proyecto ve al adminsitrador de paquetes de NuGet


En el buscador online, escribe WPToolkit


Instálalo y espera hasta que te muestre la señal de que se encuentra incluido en tu proyecto.


Compilamos el proyecto vacio, si vario y abrimos con Blend para poder añadirlo a nuestra app.


Luego de esto crea tus datos de ejemplo o SampleData


Asigna un nombre y edita la colección que se genera a tu gusto.


En este punto establece la propiedad IsFlatList = True en el LongListSelector y arrastra la collección de datos que se genera hasta el control sobre el TimeLine.


Sale una ventana pequeña que te pedirá la propiedad a la que desean enlazar y cuando empieces a escribir ItemSource aparecerá en el selector.


Vas a notar que no se ven los datos, así que deberás editar cada una de las plantillas asociadas al control, a través de su menú contextual.

Pues bien resulta que al intentar usar el control en tiempo de diseño usando Blend, no funcionaba tan sencillo como casi todo en Windows Phone, busque muchos ejemplos, y veia que usaba una clase adicional para crear los grupos, en otros creaban una clase especializada, muchos fueron los tutoriales que busqué, todos funcionaban, pero no me permitían lo que me gusta, editar en tiempo de diseño. 

Ya que traducir cosas de alguien más no me parece bonito, les comparto lo que encontré. Después de un rato de búsqueda dí con el ejemplo de en Visual Studio Magazine, donde Nick Randolph, lo que hace es realizar varios trucos, como usar un estilo de lista plana (IsFlatList = True) para poder usar SampleData en el control al enlazarlo, que es el punto donde vamos, y además de crear esta clase Group que es obligatoria, pero además usa un Converter para poder mostrar las agrupaciones en tiempo de diseño.

Así que retomemos despacio, sin embargo siempre está la opción que sigas con calma el tutorial de Nick.

La forma de editar cualquiera de las plantillas es dar clic derecho sobre el control, como ven hay muchas plantillas, editaremos algunas, inicialmente la de como se ven los items que es la que nos permitira ver los datos de la lista inicialmente.


Luego estableces el nombre a la plantilla y la ubicas donde prefieras, yo la uso en un archivo de recursos independiente.


Usaré una plantilla sencilla con un TextBlock enlazado en su propiedad Text al campo Nombre que es el único que tengo en mis datos de ejemplo


Si todo va bien, el contexto del control es la colección y podremos seleccionar el Nombre, si no, revisa que ItemSource = {Binding Collection} en el XAML, siempre que no hayas cambiado el nombre de la colección en los datos de ejemplo.


La plantilla debe verse más o menos así, si observas bien, al Grid se añadio una propiedad adicional, toolkit:TiltEffect.IsTiltEnabled="True" con el fin de que cuando presiones el item seleccionado se haga un pequeño efecto que de la sensación visual de que si lo presionas.

Ahora veamos como va nuestra página, revisa que esten todos los elementos antes de volver a tiempo de diseño, el namespace del toolkit se debio añadir al arrastrar el control.

Debes agregar el Converter que Nick sugiere en su post, y colocarlo como un recurso en tu página, revisa el DataContext del LayoutRoot, el ItemsSource del control y nota que aun tenemos el truco de la lista plana.


Si todo va bien al regresar a la vista de diseño puedes ver los datos.


Ahora es necesario empezar a construir los grupos, por eso editamos la plantilla de cabecera de grupo.


Como ves, eres libre de usar esta plantilla como quieras, esta es la que más se asemeja a la lista de aplicaciones, un cuadro con el color de acento, y que se da como ejemplo en el post que estamos siguiendo.

Las únicas cosas a notar son, el TiltEffect nuevamente, y tambien el binding a KeyName. ¿De donde iba a salir ese valor? Pues bien, proviene del Converter propuesto y por supuesto, puedes modificarlo según tus necesidades.

Si vuelves a tiempo de diseño para ver el resultado de esto, notarás que no se ahora ningun dato otra vez, la razón es que como ya estamos usando Grupos a través del conversor, es necesario cambiar a Falso el IsFlatList. En este punto te llevarás una sorpresa más y es que sigues sin ver nada, no se cual es el problema con el control, pero si cierras la ventana de la pantalla (Ojo, no Blend solo la pantalla donde estar trabajando) y guardas los cambios, verás reflejado el cambio.


Luego hay que terminar al menos 2 plantillas más, una sencilla y otra no tanto, ambas están en el tutorial, en especial la segunda tiene algunos bindings importantes para cuando la lista no tiene items


Para finalizar Nick, nos regala la parte final, el código asociado a los eventos que abren y cierran el panel de letras. Recuerda que para crear estos eventos en el code behind puedes hacerlo desde Blend, dando doble click en los campos de texto asociados a cada uno.


Revisen y cambien los nombres para que correspondan con el código que vas a copiar, preferiblemente en Visual Studio por si hace falta referencias a namespaces.

Si han seguido todos los pasos correctamente, el codigo del control debe verse similar a este


Ya puden probar a ver los grupos como se ven,  y eso es todo, ya pueden personalizarlo como gusten, incluso añadir más datos a la plantilla de items y tambien personalizar el resto de las plantillas que hacen falta, teniendo disponible la vista de diseño todo será más sencillo, y por supuesto habrá que llenar la lista en tiempo de ejecución con datos reales..


Realmente me encantó el artículo de Nick espero que lo lean y terminen para que vean el resultado final de Long List Selector o Jumpt List, este es el tutorial más adecuado si son de los que les gusta usar Blend tanto como a mi.

--

Actualización Febrero/2013: Hay una anotación y es que al ir al ultimo grupo con items, este aparece cortado. Se me ocurrió solucionarlo modificando el templace del Group Footer y colocando un contenedor con 20 de alto y transparente, al buscar si alguien más le pasaba en efecto alguien más vio el tema y lo soluciono con un footer mas alto, sin embargo el dice que aun no se soluciona del todo bien y con 20, a mi me pasa igual aunque es minimo el item que queda cortado.

Actualización Marzo 2013: Como era de esperarse, aunque la construcción con vista de diseño se hace mucho mejor, claramente en tiempo de ejecución la utilización de un converter no resulto tan buena idea. Por azar del destino terminé utilizando un móvil de gama baja despues de haber terminado la aplicación, un Nokia 610, la verdad es que el funcionamiento del panel con 200 items, es bastante lento, no quiero imaginar como funciona en un Nokia 505, razón por la cual después de finalizar la implementación transforme el codigo para que se agrupen los items en la primera consulta, por que mi lista solo requiero consultarla una vez, y listo, ya con los items agrupados mejora claramente el desempeño para las máquinas de gamma baja.

--

Éxitos y paciencia con el tutorial, son muchas instrucciones que seguir con cuidado.

Sorey

jueves, 10 de enero de 2013

Aplicando localización a datos autogenerados (Sample Data) en Windows Phone

Hace un tiempo les compartí como crear un menú estático usando datos de ejemplo generados por Blend, algo como se vé aquí de forma sencilla o que pueden ver en ese post que les menciono:


Pues bien, recién en una aplicación tuve la necesidad de que este menú tuviera localización y es la razón por la que en el post anterior les explique como ensamblar lo necesario para tener localización en nuestra aplicación de Windows Phone, y ahora continuaremos el mismo ejercicio para añadir de la forma más sencilla posible esta localización al menú que generamos.

Pues bien, lo primero será buscar el archivo donde están alojados nuestros datos de ejemplo y reemplazar las propiedades que queremos localizar, con los nombres de los recursos asociados.


Como ves la imagen tiene una advertencia muy importante, y es que este archivo se sobre escribe si editamos por el diseñador, por eso te recomendaria hacer respaldos o diseñarlo totalmente y no volver a tocarlo. Otra opción de hecho mucho mejor es que uses el diseñador pensando en la localización.


Igual aunque manejes con cuidado el diseñador, contempla la posibilidad de tener respaldos, no sea que un dia pierdas toda la personalización.

Ahora bien, este cambio solo mostrará en los datos de ejemplo los nombres de los recursos, falta un pequeño cambio más en el get de la propiedad a la que aplicaremos localización.


Debes tener presente que este archivo también se puede llegar a alterar con la manipulación del diseñador, por lo que sigue mi consejo de guardar respaldos, de hecho hacer control de versiones a tu proyecto en general te facilitará la vida.

Para finalizar, si todo va bien, probamos nuestro teléfono o emulador con idioma inglés y veremos nuestro menú o datos de ejemplo correctamente localizados.


Como siempre, espero que esto les resulte de utilidad en alguna de sus aplicaciones. Hasta la próxima.

Sorey

miércoles, 9 de enero de 2013

Aplicando localización en Windows Phone

Lo primero que debemos hacer para aplicar locación a nuestra aplicación es crear un archivo de recursos el cual tendrá los textos o imágenes del idioma por defecto.


Luego debes configurar en ese archivo los recursos que maneras, pondré 5 items con nombres genéricos pero recuerda que el nombre además de no llevar espacios debe tener algo que te recuerde que es lo que contiene el recurso. El campo de comentarios es opcional pero podria resultarte de ayuda para recordar por ejemplo donde o con que finalidad usas el recurso.


Luego crea una copia en el proyecto teniendo en cuenta que el nombre debe ser igual al original pero escribiendo el lenguaje y pais, que encuentas en las indicaciones de cultura y lenguaje de MSDN. En mi ejercicio usaré inglés de Estados Unidos, por lo que el nombre del archivo es AppResources.en-US.resx.


Cambia los recursos en el interior, solo el campo valor, debes conservar el campo nombre y recuerda que si añades o modificas los archivos debes mantenerlos sincronizados. Es necesario tener presente los idiomas que se soportan en Windows Phone 7.1 y Windows Phone 8 y las recomendaciones de localización que se dan en la misma publicación.


Por favor recuerda establecer el modificador de acceso de los archivos de recursos como Público.

Ahora debemos crear la clase que nos permitirá acceder a los recursos a través de bindings o enlaces.


Luego agregamos a nuestro App.xaml nuestra clase como recurso


Ahora debemos configurar nuestro proyecto para que acepte el lenguaje asociado al archivo que construimos. Así que entramos a las propiedades del proyecto y lo seleccionamos.

En mi caso tenia el inglés por defecto, pero mi aplicación tendría español por defecto así que debemos entrar a la información del ensamblado a cambiarlo.


Seleccionamos nuestro idioma por defecto y guardamos


Cerramos y volvemos a abrir las propiedades para que se refleje el cambio. Y ahora si agregamos como idiomas soportados tambien el inglés.


Ahora vamos a probar la localización sencilla con el titulo, enlazando la Opcion 1.


 Si lo pruebas en el emulador o en el teléfono, entra a la configuración, cambia el estado y verás que cambia el idioma del nombre de la página. Para que cambie el idioma debes reiniciar el telefono o el emulador desde el botón que se habilita al cambiar el idioma del teléfono.


Espero que les sea útil y hasta la próxima.

Sorey

jueves, 3 de enero de 2013

Infografía: Posibilidades con tecnologías Microsoft

Me encantó esta infografía compartida por @lvbernal excelente visión de las posibilidades, para quienes a veces nos preguntamos sobre el futuro. Como dice el poster, elije tu aventura.

Si lo quieres tambien está en versión PDF


Microsoft Technologies - An infographic by the team from Next at Microsoft