[XAML] ValueConverters

¿Qué son?

Un ValueConverter es una clase que va a permitir la conversión de un tipo de dato a otro concreto para que un enlace a datos (Binding) lo entienda.

¿Cómo se crean?

.NET ya tiene incorporados distintos conversores para ahorrar el trabajo de los desarrolladores, pero puede darse el caso que se necesite crear uno propio.

Para poder definir un ValueConverter es necesario crear una nueva clase que implemente la Interfaz IValueConverter.

Esta interfaz expone para que podamos implementar la función de Conversión, y la función de deshacer:

– Convert

– ConvertBack

Ejemplo sencillo:

Un ejemplo de creación de un ValueConverter sería la transformación de un estado de un Expediente.

Vamos a situarnos, para definir los Estados de los expedientes tenemos los distintos valores en una Enumeración:

   1: public enum Estados

   2: {

   3:     Activo,

   4:     Pendiente,

   5:     Archivado,

   6:     Resuelto,

   7:     Inactivo

   8: }

Para que de un vistazo rápido por pantalla, el usuario pueda ver los distintos estados por colores, crearemos un Conversor de Estados a Colores:

   1: public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

   2:         {

   3:             Estados es=(Estados)value;

   4:             switch(es)

   5:             {

   6:                 case Estados.Activo:

   7:                     return new SolidColorBrush(Colors.Green);

   8:                 case Estados.Inactivo:

   9:                     return new SolidColorBrush(Colors.Gray);

  10:                 case Estados.Pendiente:

  11:                     return new SolidColorBrush(Colors.Yellow);

  12:                 case Estados.Resuelto:

  13:                     return new SolidColorBrush(Colors.Blue);

  14:                 case Estados.Archivado:

  15:                     return new SolidColorBrush(Colors.LightBlue);

  16:             }

  17:             return new SolidColorBrush(Colors.White);

  18:         }

Bien para utilizar el ValueConverter en nuestro XAML, será necesario, que lo referenciemos e instanciemos en nuestro Control / Vista / Ventana…

   1: <Window x:Class="Converters.MainWindow"

   2:         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   3:         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   4:         xmlns:converters="clr-namespace:Converters"

   5:         Title="MainWindow" Height="350" Width="525">

   6:     <Window.Resources>

   7:         

   8:         <converters:EstadoAColorConverter x:Key="est"></converters:EstadoAColorConverter>

   9:     </Window.Resources>

 

Y después en el momento de realizar el Binding utilicemos la Propiedad Converter:

 

   1: <ListBox x:Name="listado" ItemsSource="{Binding}">

   2:             <ListBox.ItemTemplate>

   3:                 <DataTemplate>

   4:                     <Grid>

   5:                         <TextBlock Background="{Binding Estado, Converter={StaticResource est}}" Text="{Binding Nombre}"/>

   6:                     </Grid>

   7:                 </DataTemplate>

   8:             </ListBox.ItemTemplate>

   9:         </ListBox>

 

 

Espero que os sea de utilidad.!

Saludos

 

Un comentario en “[XAML] ValueConverters”

  1. Un articulo muy interesante, pero ….. como puedo hacer para pasarle como parametro el textblok? Comento esto porq estoy atascado en un proyecto q emplea esto y necesito hacer llegar a Convert la lista de items de un combobox.

    Contacta conmigo en combuilder at gmail.com.

    Muchas gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *