Tengo una situación en la que necesito mostrar un valor entero, vinculado a una propiedad en mi contexto de datos, después de someterlo a dos conversiones separadas:
- Invierta el valor dentro de un rango (por ejemplo, el rango es de 1 a 100; el valor en el contexto de datos es 90; el usuario ve el valor de 10)
- convierte el número en una cadena
Me doy cuenta de que podría hacer ambos pasos creando mi propio convertidor (que implementa IValueConverter). Sin embargo, ya tengo un convertidor de valores separado que hace solo el primer paso, y el segundo paso está cubierto por Int32Converter.
¿Hay alguna manera de que pueda encadenar estas dos clases existentes en XAML sin tener que crear una clase adicional que las agregue?
Si necesito aclarar algo de esto, hágamelo saber. :)
Gracias.
wpf
data-binding
xaml
ivalueconverter
Mal Ross
fuente
fuente
return this.Reverse<IValueConverter>().Aggregate(value, (current, converter) => converter.ConvertBack(current, targetType, parameter, culture));
Encontré exactamente lo que estaba buscando, cortesía de Josh Smith: Piping Value Converters (enlace de archive.org) .
Él define una
ValueConverterGroup
clase, cuyo uso en XAML es exactamente como esperaba. He aquí un ejemplo:Buena cosa. Gracias, Josh. :)
fuente
La implementación de Town del proyecto Silverlight de Gareth Evans es excelente, sin embargo, no admite diferentes parámetros del convertidor.
Lo modifiqué para que pueda proporcionar parámetros, delimitados por comas (a menos que los escape, por supuesto).
Convertidor:
Nota: ConvertBack no se implementa aquí, consulte mi Gist para obtener la versión completa.
Implementación:
fuente
Sí, hay formas de encadenar convertidores, pero no se ve bonito y no lo necesita aquí. Si alguna vez llega a necesitar esto, pregúntese si realmente es ese el camino a seguir. Simple siempre funciona mejor incluso si tienes que escribir tu propio convertidor.
En su caso particular, todo lo que necesita hacer es formatear un valor convertido en una cadena.
StringFormat
la propiedad en unBinding
es su amigo aquí.fuente
Aquí hay una pequeña extensión de la respuesta de Town para admitir enlaces múltiples:
fuente