Entendiendo Multi-Binding en Xamarin Forms

Charlin Agramonte
3 min readDec 12, 2020

--

Multi-Binding es una gran funcionalidad que fue introducida en Xamarin Forms 4.7, la cual nos permite conectar (bindear) multiples elementos a una propiedad. Esto nos da mucha flexibilidad, ya que ya no necesitamos crear múltiples elementos de UI para conectar cada Bindable Property, lo que mejora el rendimiento de nuestra aplicación y hace que nuestro código sea más limpio.

¿Por qué es importante?

Antes del Multi-Binding para lograr conectar multiples elementos a una propiedad se requería un gran esfuerzo adicional, dado que el único control que tiene algo similar es el Label con la propiedad FormattedText.

Pero, ¿Qué pasa cuando queriamos conseguir lo mismo por ejemplo con Botones? No hay ninguna propiedad FormattedText que podamos usar. ¡MULTI-BINDING AL RESCATE!

¿Cómo lo uso?

Antes de comenzar agreguemos algunas propiedades al ViewModel.

En nuestro XAML agreguemos la etiqueta MultiBinding a cualquier propiedad que queramos, luego especificamos el formato usando StringFormat y agregando un {} para escapar de la secuencia, y por ultimo agregamos las propiedades usando {[sequenceNumber]} para cada propiedad.

Ej.

Resultado:

Por cada Binding, también se puede especificar un Converter, TargetNullValue, FallbackValue, TargetNullValue, etc

¿Cómo lo uso con Converters?

(Si no está familiarizado con Converters, lee este artículo primero).

Hay dos maneras de hacerlo:

  • Agrégandolo a la propiedad Multi-Binding
  • Agrégandolo a cada Binding

Agrégandolo a la propiedad Multi-Binding

Este convierte la lista de Bindings al valor que queremos mostrar. Para lograrlo, tendremos que crear nuestros converters un poco diferentes a como estamos acostumbrados a hacerlo.

Por ejemplo, creemos un converter que dependiendo del nombre completo y un parámetro nos permita saber si esa persona es nuestro primo o no.

Como puedes ver, dado que estamos convirtiendo un Multi-Binding a un solo elemento, nuestro convertidor es un pooco diferente. En lugar de extender de IValueConverter, extendemos de IMultiValueConverter y recibimos un arreglo de objetos con todos los Bindings especificados en el XAML.

Para usarlo:

Con este enfoque, es bastante fácil mostrar/ocultar elements basado en múltiples propiedades, por ejemplo:

Mira este ejemplo completo aquí.

Agrégandolo a cada Binding

Otra forma de usarlo es aplicando converters individuales a cada Binding, con este enfoque no hay que hacer mucho esfuerzo adicional a lo que estamos accostumbrados, ya que nuestros converters seguiran extendiendo de IValueConverter.

Por ejemplo, apliquemos TextToUpper al primer nombre y TextToLower al segundo nombre:

¿Cómo usarlo con propiedades estáticas?

Para usarlo con propiedades estaticas es muy sencillo, solo debe asegurarse de usar el Source en el Binding en lugar del Path, ya que esta propiedad estatica no pertene al Source principal sino a otro Source externo.

Eso es todo por ahora, puede consultar el código fuente completo aquí.

Happy coding!

--

--

Charlin Agramonte

Co-Founder of CrossGeeks. Currently Xamarin Certified Developer and Microsoft MVP.