Descripción

Uno de los retos de los desarrolladores es el allegarse los conocimientos necesarios referentes a los diversos sistemas operativos y lenguajes de programación y actualizar estos conocimientos; asimismo, mantener múltiples versiones de código y diferentes ambientes, y administrar varias distribuciones y actualizaciones. El presente libro se constituye como una enorme contribución para el incremento de los conocimientos de los desarrolladores de habla hispana, ya que permite desarrollar, conservar y administrar una línea base de código para iOS, Android y Windows y crear así aplicaciones nativas para cada plataforma; de este modo se logra que la App tenga la performance y experiencia en cada dispositivo, y además permite al desarrollador la reutilización, optimización y productividad en la calidad del código y, por ende, de la aplicación.

Este documento ofrece a los lectores una completa, sólida y didáctica referencia que facilita adquirir de Xamarin.Forms el máximo potencial y de esa manera mejorar el desarrollo de aplicaciones móviles para múltiples plataformas. Xamarin.Forms ha probado ser una excelente opción tecnológica cuando se trata de decidir el rumbo por el que irán las soluciones móviles en una empresa o institución.

VENTAJAS

• La organización de este libro permite leerse en orden de inicio a fin, ya que gradualmente en cada capítulo (a partir del 4) se implementan funcionalidades adicionales y modificaciones en la aplicación de encuestas.
• Cuenta con numerosas figuras explicativas de cada uno de los temas abordados.

CONOZCA

• Las maneras mediante las cuales se pueden manejar los eventos de los elementos visuales.
• Los estilos que pueden aplicar todos los elementos visuales y controles de Xamarin.Forms.
• Las características y funcionalidad del patrón de diseño Model-View-ViewModel.

APRENDA

• A manejar el lenguaje XAML para realizar soluciones sofisticadas en Xamarin.Forms.
• A ejecutar un enlace de datos en Xamarin.Forms mediante la extensión de marcado {Binding}.
• A utilizar el “kit de desarrollo” PRISM en Xamarin.Forms para el diseño, arquitectura y construcción de aplicaciones.

DESARROLLE SUS HABILIDADES PARA

Conocer los fundamentos de Xamarin y de Xamarin.Forms para la construcción de aplicaciones multi-plataforma.
El modelo de aplicación que expone Xamarin.Forms.
El lenguaje XAML para la definición de las Interfaces de Usuario.
El modelo de navegación y mensajería.
El importante mecanismo de Enlace de Datos en Xamarin.Forms.
El objetivo y papel que juegan los Comandos.
Los diversos beneficios de usar el patrón de diseño MVVM en la arquitectura de tus aplicaciones.
La invocación de funcionalidad nativa de los sistemas operativos.
El por qué Prism es una pieza fundamental e imprescindible para construir arquitecturas extensibles, robustas y de fácil mantenimiento.
El uso de SQLite como base de datos para almacenamiento local.
La comunicación a servicios REST para tus aplicaciones móviles.

A QUIÉN VA DIRIGIDO

El presente texto está dirigido tanto a desarrolladores amateurs que deseen aprender a construir aplicaciones multiplataforma con Xamarin.Forms, como a desarrolladores profesionales de empresas que quieran iniciar o perfeccionar su estrategia de aplicaciones móviles multiplataforma con esta tecnología.

ÍNDICE

Prefacio ……………………………………………………………………………………………… … XV
Prólogo ……………………………………………………………………………………………… XVII
Capítulo 1. Introducción a Xamarin ………………………………………………………….. 1
¿Qué es Xamarin? …………………………………………………………………………………… 1
Bueno ya, entonces ¿qué es Xamarin? ………………………………………………………. 3
Métodos para compartir el código …………………………………………………………….. 4
Fundamentos de Xamarin.Forms ………………………………………………………………….. 6
¿Qué es Xamarin.Forms? …………………………………………………………………………. 6
¿Xamarin o Xamarin.Forms? …………………………………………………………………….. 6
Anatomía de una solución …………………………………………………………………………… 7
Arquitectura de Xamarin.Forms ……………………………………………………………………. 8
Clase Application …………………………………………………………………………………….. 8
Ciclo de vida …………………………………………………………………………………………… 9
Ejecutando Xamarin.Forms en cada proyecto concreto ……………………………… 10
Jerarquía de clases ………………………………………………………………………………… 13
Sistema de Propiedades Enlazables …………………………………………………………….. 17
¿Qué es una Propiedad Enlazable? ………………………………………………………….. 18
BindableObject ……………………………………………………………………………………… 19
BindableProperty ………………………………………………………………………………….. 19
Propiedades Adjuntas ……………………………………………………………………………. 21
Manejo de eventos …………………………………………………………………………………… 22
Manejo de eventos desde XAML ……………………………………………………………… 23
Manejo de eventos a través de código usando la sintaxis estándar ……………… 23
Manejo de eventos a través de código usando Expresiones Lambda ……………. 24
Capítulo 2. El lenguaje XAML …………………………………………………………………. 25
Introducción ….. ……………………………………………………………………………………… 25
¿Qué es XAML? …………………………………………………………………………………….. 25
Reglas básicas de XAML …………………………………………………………………………. 25
Espacios de nombres XML ………………………………………………………………………. 27
Sintaxis de subelementos ……………………………………………………………………….. 28
Extensiones de marcado ………………………………………………………………………… 29
Recursos ………………………………………………………………………………………………. 30
Convertidores de tipos …………………………………………………………………………… 34
XAML compilado …………………………………………………………………………………… 37
Capítulo 3. Interfaz de Usuario ………………………………………………………………. 39
Contenedores …………………………………………………………………………………………. 39
StackLayout ………………………………………………………………………………………….. 39
Grid …………………………………………………………………………………………………….. 40
Controles …………………………………………………………………………………………………. 45
Controles comunes …………………………………………………………………………………… 46
Button …………………………………………………………………………………………………. 46
Stepper ………………………………………………………………………………………………… 47
Switch ………………………………………………………………………………………………….. 47
Slider …………………………………………………………………………………………………… 47
DatePicker ……………………………………………………………………………………………. 47
TimePicker ……………………………………………………………………………………………. 48
ProgressBar ………………………………………………………………………………………….. 48
ActivityIndicator ……………………………………………………………………………………. 48
Image ………………………………………………………………………………………………….. 48
BoxView ………………………………………………………………………………………………. 48
Frame ………………………………………………………………………………………………….. 49
WebView ……………………………………………………………………………………………… 49
Controles de texto ……………………………………………………………………………………. 49
Label ……………………………………………………………………………………………………. 49
Entry ……………………………………………………………………………………………………. 50
Editor …………………………………………………………………………………………………… 50
SearchBar …………………………………………………………………………………………….. 50
Tipos de teclado ……………………………………………………………………………………. 50
Controles de lista ……………………………………………………………………………………… 52
Picker ………………………………………………………………………………………………….. 52
ListView ……………………………………………………………………………………………….. 52
Estilos ……………………………………………………………………………………………………… 53
Usando los estilos …………………………………………………………………………………. 53
Propiedad BasedOn……………………………………………………………………………….. 54
Estilos implícitos ……………………………………………………………………………………. 54
Propiedad ApplyToDerivedTypes …………………………………………………………….. 57
Triggers en estilos …………………………………………………………………………………. 58
Diccionarios mezclados ………………………………………………………………………….. 61
Capítulo 4. Navegación y Mensajería ………………………………………………………. 65
Navegación ……………………………………………………………………………………………… 65
Navegación jerárquica …………………………………………………………………………… 66
Navegación modal …………………………………………………………………………………. 68
Mensajería ………………………………………………………………………………………………. 69
DisplayAlert ………………………………………………………………………………………….. 70
DisplayActionSheet ……………………………………………………………………………….. 70
Clase MessagingCenter ………………………………………………………………………….. 71
Manos a la obra ……………………………………………………………………………………….. 73
Creando la solución ……………………………………………………………………………….. 74
Configuración de la solución …………………………………………………………………… 81
Despliegue de los ensamblados de Xamarin.Forms ……………………………………. 81
Creación de la aplicación en la PCL ………………………………………………………….. 83
Modificación del punto de entrada en Android …………………………………………. 84
Modificación del punto de entrada en iOS ……………………………………………….. 85
Modificación del punto de entrada en UWP ……………………………………………… 86
Implementando las dos páginas ………………………………………………………………. 87
Implementando SurveysView …………………………………………………………………. 89
Implementando SurveyDetailsView …………………………………………………………. 90
Desplegando los equipos ……………………………………………………………………….. 92
Comunicando ambas páginas …………………………………………………………………. 95
Probando la aplicación …………………………………………………………………………… 97
Capítulo 5. Enlace de Datos …………………………………………………………………… 99
Introducción ………………………………………………………………………………………… 99
Source ……………………………………………………………………………………………….. 100
Path …………………………………………………………………………………………………… 100
Mode …………………………………………………………………………………………………. 100
Interfaces INotifyPropertyChanged y INotifyCollectionChang1d ………………… 103
ObservableCollection ………………………………………………………………………………. 110
Contexto de Enlace de Datos ………………………………………………………………… 113
Enlace entre elementos ……………………………………………………………………….. 116
Propiedad StringFormat ……………………………………………………………………….. 118
Plantillas de Datos …………………………………………………………………………………… 122
Tipos de celdas ……………………………………………………………………………………. 123
Convertidores de Valor ……………………………………………………………………………. 125
Creando un Convertidor de Valor ………………………………………………………….. 126
Usando un Convertidor de Valor ……………………………………………………………. 127
Manos a la obra ……………………………………………………………………………………… 129
Creando la fuente de datos …………………………………………………………………… 130
Implementando la Plantilla de Datos ……………………………………………………… 135
Implementando el Convertidor de Valor ………………………………………………… 138
Capítulo 6. Comandos ………………………………………………………………………… 141
Introducción …………………………………………………………………………………………… 141
Creando un comando básico …………………………………………………………………. 142
Implementando CanExecute() ……………………………………………………………….. 146
Implementando CanExecuteChanged …………………………………………………….. 147
Implementaciones existentes recomendadas ………………………………………….. 150
Manos a la obra ……………………………………………………………………………………… 150
Implementando el comando …………………………………………………………………. 151
Capítulo 7. El Patrón de Diseño Model-View-ViewModel …………………………. 155
Introducción …………………………………………………………………………………………… 155
¿Qué es el patrón de diseño Model-View-ViewModel? …………………………….. 155
La Vista o View ……………………………………………………………………………………. 156
El Modelo para la Vista o ViewModel …………………………………………………….. 156
El Modelo …………………………………………………………………………………………… 157
Ventajas …………………………………………………………………………………………….. 157
Cardinalidad entre los Model, Views y ViewModels …………………………………. 158
Estrategias para relacionar una Vista con su ViewModel ………………………….. 158
Cómo pensar en MVVM ……………………………………………………………………….. 159
Manos a la obra ……………………………………………………………………………………… 160
Renombrando y organizando las clases actuales ……………………………………… 160
Implementando SurveyDetailsViewModel ………………………………………………. 162
Modificando la página SurveyDetailsView ………………………………………………. 166
Implementando la colección de equipos ………………………………………………… 168
Implementando la selección de equipos …………………………………………………. 169
Implementando el comando para finalizar una encuesta ………………………….. 172
Desinscribiendo los mensajes ……………………………………………………………….. 175
Ejecutando la aplicación ……………………………………………………………………….. 177
Capítulo 8. Funcionalidad Nativa de las Plataformas ……………………………….. 179
Introducción …………………………………………………………………………………………… 179
Clase Device …………………………………………………………………………………………… 179
Idiom …………………………………………………………………………………………………. 179
OS ……………………………………………………………………………………………………… 180
BeginInvokeOnMainThread() ………………………………………………………………… 180
StartTimer() ………………………………………………………………………………………… 181
OnPlatform() y OnPlatform() ……………………………………………………………. 181
Clase OnPlatform ………………………………………………………………………………. 182
Imágenes ……………………………………………………………………………………………….. 182
Servicio de Dependencias ………………………………………………………………………… 183
DependencyService ……………………………………………………………………………… 184
Plugins de Xamarin …………………………………………………………………………………. 188
Manos a la obra ……………………………………………………………………………………… 189
Modificando el modelo ………………………………………………………………………… 189
Creando la interfaz IGeolocationService …………………………………………………. 190
Implementación de IGeolocationService en UWP ……………………………………. 191
Implementación de IGeolocationService en Android ………………………………… 193
Usando el Servicio de Dependencias ……………………………………………………… 196
Modificando la Plantilla de Datos ………………………………………………………….. 197
Probando la aplicación …………………………………………………………………………. 198
Capítulo 9. Arquitectura de Aplicaciones con Prism …………………………………. 201
Introducción ………………………………………………………………………………………… 201
¿Qué es Prism?……………………………………………………………………………………. 202
¿Por qué usar Prism? …………………………………………………………………………… 202
Versiones de Prism ………………………………………………………………………………. 203
¿Qué ofrece Prism para Xamarin.Forms? ……………………………………………….. 203
Principios SOLID ………………………………………………………………………………….. 204
Requerimientos …………………………………………………………………………………… 205
Modelo de Aplicación ……………………………………………………………………………… 205
Clase PrismApplication …………………………………………………………………………. 206
Clase BindableBase …………………………………………………………………………………. 208
Clase DelegateCommand …………………………………………………………………………. 208
ObservesProperty() ……………………………………………………………………………… 208
ObservesCanExecute() …………………………………………………………………………. 209
Navegación ……………………………………………………………………………………………. 209
INavigationService ……………………………………………………………………………….. 209
INavigationAware ………………………………………………………………………………… 210
IPageDialogService ………………………………………………………………………………….. 210
Inyección de dependencias ………………………………………………………………………. 211
¿Cuándo se usa la Inyección de Dependencias en Prism? …………………………. 213
Manos a la obra ……………………………………………………………………………………… 214
Instalando Prism …………………………………………………………………………………. 214
Implementando el Modelo de Aplicación ……………………………………………….. 216
Implementando la clase BindableBase ……………………………………………………. 219
Implementando la infraestructura de navegación ……………………………………. 220
Inyección de Dependencias …………………………………………………………………… 221
Implementando DelegateCommand ………………………………………………………. 235
Probando la aplicación con Prism ………………………………………………………….. 236
Complementando la aplicación con más páginas …………………………………….. 237
Implementando Material Design en la aplicación de Android ……………………. 251
Probando la aplicación con la nueva estructura ………………………………………. 253
Capítulo 10. Almacenamiento local con SQLite ……………………………………….. 255
Introducción ………………………………………………………………………………………… 255
¿Qué es SQLite? ………………………………………………………………………………….. 255
Instalando y referenciando SQLite en el proyecto UWP ……………………………. 255
Instalando el paquete de SQLite para .NET ……………………………………………… 257
Creando la conexión a SQLite ………………………………………………………………… 258
Creando un servicio para la base de datos ………………………………………………. 259
Manos a la obra ……………………………………………………………………………………… 260
Implementando ISQLiteService ……………………………………………………………… 260
Modificando la clase Survey ………………………………………………………………….. 263
Creación de la interfaz ILocalDbService ………………………………………………….. 264
Registrando la instancia en el contenedor de Unity………………………………….. 268
Inyectando el servicio en los ViewModels ………………………………………………. 268
Guardando las encuestas en la base de datos …………………………………………. 270
Leyendo las encuestas de la base de datos ……………………………………………… 271
Implementando la funcionalidad de borrar encuestas ……………………………… 272
Agregando un texto amigable en la Interfaz de Usuario ……………………………. 278
Probando la aplicación …………………………………………………………………………. 279
Capítulo 11. Comunicación a Servicios …………………………………………………… 281
Introducción …………………………………………………………………………………………. 281
SOAP vs. REST……………………………………………………………………………………… 281
Creando un servicio REST con ASP.NET Web API …………………………………… 282
Manos a la obra ……………………………………………………………………………………… 284
Creando la base de datos ……………………………………………………………………… 284
Creando el proyecto Web API ……………………………………………………………….. 286
Creando los controladores SurveysController y TeamsController ………………. 287
Creando el proyecto Surveys.Entities …………………………………………………….. 289
Creando el proyecto Surveys.Web.DAL.SqlServer ……………………………………. 292
Implementando el controlador de equipos …………………………………………….. 299
Implementando el controlador de encuestas ………………………………………….. 300
Creando el servicio IWebApiService ……………………………………………………….. 302
Registrando el servicio IWebApiService ………………………………………………….. 305
Publicando el servicio REST …………………………………………………………………… 305
Probando el servicio REST …………………………………………………………………….. 308
Modificando ILocalDbService ………………………………………………………………… 309
Creando el módulo de sincronización …………………………………………………….. 311
Implementando la nueva página de selección de equipos ………………………… 318
Modificando SurveyDetailsViewModel …………………………………………………… 327
Modificando la página de encuestas ………………………………………………………. 329
Probando la aplicación …………………………………………………………………………. 336
Protegiendo el servicio con autenticación basada en tokens …………………….. 337
Probando la aplicación …………………………………………………………………………. 351
Índice analítico ………………………………………………………………………………….. 353