Categorías destacadas
programacion php    
Artículo
2
¡votar!

 IValueConverter una Interfaz muy util en el DataBinding de WPF

En los anteriores posts hemos visto como realizar el DataBinding en WPF, pero nos hemos centrado en los datos y algunas veces no nos valen el dato tal y como esta en la clase que enlazamos sino que requiere una transformación, con esta interfaz lo vamos a poder realizar.

La interfaz contiene dos métodos:

  • Convert: es llamada cuando se hace la conversión de datos desde la fuente hacia los componentes de UI (Int32 a Brush)
  • ConvertBack:ConvertBack es llamado cuando se convierte desde la UI a la fuente de datos

En cualquier caso, el valor actual y el tipo de datos son pasados a la función de conversión en el converter.

Imaginemos que queremos que la propiedad ForeGroud de un TextBox se ponga de un color determinado en funcione de la edad, para ello utilizaremos un Converter.

[ValueConversion(/*sourceType*/ typeof(int),
/*targetType*/ typeof(Brush))]
public class AgeToForegroundConverter : IValueConverter {
public object Convert(object value, Type targetType, ...) {
if( targetType != typeof(Brush) ) { return null; }
int age = int.Parse(value.ToString( ));
return (age > 25 ? Brushes.Red : Brushes.Black);
}
}
public object ConvertBack(object value,
Type targetType, ...) {
throw new NotImplementedException( );
}
}


Si os fijáis la clase debe de tener el atributo ValueConversion donde se especifica el tipo del valor de entrada y el de salida en este caso int como entrda y brush como salida, es útil para documentar el tipo de conversión que estamos realizando, pero no es exigido por WPF

Después implementamos los métodos de Convert donde en este caso devolvemos una brocha roja o negra dependiendo si mayor o no de 25, en este caso no hace falta implementar el método ConverBack porque el Binding es OneWay.

El Binding en este caso seria:
<!-- Window1.xaml -->
<Window ... xmlns:local="clr-namespace:WithBinding">
<Window.Resources>
<local:Person x:Key="Tom" ... />
<local:AgeToForegroundConverter x:Key="ageConverter" />
</Window.Resources>
<Grid DataContext="{StaticResource Tom}">
...
<TextBox
Text="{Binding Path=Age}"
Foreground="
{Binding
Path=Age,
Converter={StaticResource ageConverter}}"
... />
...
<Button ...
Foreground="{Binding Path=Foreground,
ElementName=ageTextBox}">Birthday</Button>
</Grid>
</Window>

Ponemos como recurso una referencia a la clase que implementa IValueConverter y en el Binding del ForeGround el Path esta enlazado a la propiedad Age pero tiene el parámetro Converter relacionado con nuestro conversor.

De esta manera se implementa los converters, muy útiles en el DataBinding.

Artículo creado por: Oscar Álvarez Guerras
   
Publicado por:
Angel Carrero
Recomendar
a un amigo
Compartir
en redes
 
Comentarios
 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon