[Xamarin.Forms] Novedades de Xamarin.Forms 1.3: Behaviors

xamarinhqNovedades de Xamarin.Forms 1.3

Recientemente Xamarin lanzo la version 1.3 definitiva de Xamarin.Forms con una cantidad de novedades muy sustansiosa. Entre otras novedades contamos con:

  • Soporte para Estilos.
  • Soporte para Behaviors.
  • Soporte para Triggers (DatTriggers y MultiTriggers).
  • Nuevo miembro en las páginas, OnBackButtonPressed para gestionar la pulsación del botón físico atrás.
  • Mejoras en el DependencyService para añadir más flexibilidad a la hora de registrar dependencias.
  • Corrección de bugs.

En este artículo vamos a analizar todas las novedades relacionadas con el uso de behaviors en Xamarin.Forms 1.3.

¿Te apuntas?

Behaviors

El concepto es algo muy sencillo. Un Behavior espera por “algo” para hacer “algo”. Concretamos más. Un Behavior espera por “algo”. Puede ser un evento que se lanza, el cambio de una propiedad o cualquier otra acción personalizada que deseamos monitorear. Una vez que ese “algo” se desencadena, el Behavior puede hacer acciones muy variadas, desde cambiar el valor de una propiedad, lanzar un evento, hacer verificaciones o validaciones, etc.

Los Behaviors nos permiten encapsular lógica que se puede adjuntar a un componente específico. Generalmente ayudan a personalizar o completar ciertos componentes e incluso en muchas ocasiones son un a ayuda fundamental para mantener una estructura idónea al implementar patrones como MVVM.

Comenzamos creando un nuevo proyecto desde cero:

Nuevo proyecto Xamarin Forms

Nuevo proyecto Xamarin Forms

Tras crear el proyecto procedemos a actualizar a Xamarin.Forms 1.3. Para ello, vamos a gestionar los paquetes NuGet a nivel de solución.

NuGet Xamarin.Forms 1.3

NuGet Xamarin.Forms 1.3

NOTA: Si tenéis problemas al instalar Xamarin. 1.3 aseguráos de contar con la última versión de NuGet. Versiones antiguas de NuGet pueden ocasionar problemas en la instalación. Para asegurar tener la última versión debemos dirigirnos a Herramientas > Extensiones y Actualizaciones -> Instalados. Aqui podremos seleccionar NuGet e instalar la última versión.

El objetivo que buscaremos en este ejemplo sera crear un Behavior analizando todas las partes implicadas que permitira solo introducir valores numéricos en una caja de texto.

Comenzamos creando el behavior. Crearemos una clase que heredará de Behavior<T>:

public class NumericEntryBehavior : Behavior<Entry>
{

}

Pasamos a ver la implementación:

public class NumericEntryBehavior : Behavior<Entry>
{
     private string _lastValidText;

     protected override void OnAttachedTo(Entry bindable)
     {
         bindable.TextChanged += EntryTextChanged;
         base.OnAttachedTo(bindable);
     }

     protected override void OnDetachingFrom(Entry bindable)
     {
         bindable.TextChanged -= EntryTextChanged;
         base.OnDetachingFrom(bindable);
     }

     private void EntryTextChanged(object sender, EventArgs e)
     {
         var entry = sender as Entry;
         if (entry != null)
         {
             double value;
             if (string.IsNullOrEmpty(entry.Text) ||
                 Double.TryParse(entry.Text, out value))
             {
                 _lastValidText = entry.Text;
                 return;
             }

             entry.Text = _lastValidText;
         }    
     }
}

Cada vez que el usuario escriba algo en la caja de texto haremos una verificación para determinar si se trata de un valor numérico. Para ello, sobreescribimos el método OnAttachedTo donde recibiremos el objeto Entry y nos suscribiremos a su evento TextChanged. De igual forma, sobreescribimos el método OnDetachingFrom donde eliminaremos la suscripción al evento y el Behavior del objeto Entry. En el evento TextChanged intentamos parsear el contenido recibido a Double para verificar si es un dígito o no. De esa forma, vamos comprobando que lo que escribe el usuario son dígitos o no.

NOTA: Para aquellos que tengáis experiencia definiendo Behaviors en la plataforma Windows habréis observado algunas diferencias. No tenemos acceso al objeto AssociatedObject. En cambio, el objeto asociado se inyecta en los casos necesarios.

Una vez definido el Behavior es hora de implementarlo en nuestra interfaz de usuario. Para acceder al mismo debemos definir el namespace donde se encuentra:

xmlns:behaviors="clr-namespace:Entry_Behavior.Behaviors;assembly=Entry_Behavior"

Simple. Utilizamos la sintaxis clr-namespace para definir el namespace donde se encuentra definido.

<Entry>
     <Entry.Behaviors>
        <behaviors:NumericEntryBehavior />
     </Entry.Behaviors>
</Entry>

Vamos a analizar el trozo de XAML anterior. Cada elemento que hereda de VisualElement cuenta con una propiedad de tipo IList<Behavior>. Para utilizar nuestro behavior NumericEntryBehavior, dentro de la colección de Behaviors del control Entry, definimos el mismo utilizando el espacio de nombres behaviors, definido previamente.

NOTA: De nuevo, para aquellos con experiencia previa con Behaviors en la plataforma Windows. En Xamarin.Forms cada elemento heredado de VisualElement cuenta con una propiedad Behaviors. No es necesario importar librerías para poder trabajar con Behaviors.

Y todo listo!. Si ejecutamos nuestro ejemplo podemos probar el “comportamiento” añadido al control Entry. Al escribir información veremos que solo se permiten valores numéricos o carácteres como la coma en caso de desear escribir decimales.

El resultado es el siguiente:

Nuestro Behavior en funcionamiento!

Nuestro Behavior en funcionamiento!

Podéis descargar el ejemplo completo realizado a continuación:

Recordar que podéis dejar en los comentarios cualquier tipo de sugerencia o pregunta.

Más información

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s