Artículo
|
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:
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.
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:
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
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 |
|
|
Comentarios
Últimas noticias
· factura
Últimos artículos














































