Crear y aplicar un convertidor de valores
- Para crear una clase de convertidor de valores
- Para aplicar un convertidor de valores a una propiedad
Un convertidor de valores sirve para convertir datos de un tipo a otro cuando se enlazan datos en Microsoft® Expression Blend™. Por ejemplo, es posible que desee convertir una cadena como "123" a su valor entero correspondiente o un campo como Visibility.Hidden a un valor booleano como false.
El convertidor de valores implementa la interfaz IValueConverter en el código de una clase de Microsoft® .NET Framework. Deben implementarse tanto el método Convert como el método ConvertBack porque el motor de enlace de datos llama a estos métodos cuando mueve un valor del origen al destino del enlace. Para obtener más información, vea el tema sobre la interfaz IValueConverter en MSDN (puede estar en inglés).
Para aplicar un convertidor de valores, sólo tiene que rellenar el campo Convertidor de valores del cuadro de diálogo Crear enlace de datos cuando enlace datos a una propiedad.
Para crear una clase de convertidor de valores
Pegue el siguiente código en un archivo denominado DoubleValueConverter.cs. Este código contiene los dos convertidores de valores siguientes:
-
DoubleToIntegerValueConverterproporciona una conversión bidireccional entre un valor doble y un entero. -
DoubleToRomanNumeralValueConverterproporciona una conversión unidireccional de un valor doble a una representación de cadena de un número romano.
using System; using System.Collections.Generic; using System.Text; using System.Windows.Data; namespace Microsoft.Expression.Samples { /// <summary> /// DoubleToIntegerValueConverter provides a two-way conversion between /// a double value and an integer. /// </summary> public class DoubleToIntegerValueConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return System.Convert.ToInt32(value); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return System.Convert.ToDouble(value); ; } } /// <summary> /// DoubleToIntegerValueConverter provides a one-way conversion from /// a double value to a string representation of a Roman numeral. /// </summary> public class DoubleToRomanNumeralValueConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return this.ConvertToRomanNumeral(System.Convert.ToInt32(value)); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return null; } private List<IntegerStringPair> romanStrings = null; private string ConvertToRomanNumeral(int input) { StringBuilder myBuilder = new StringBuilder(); foreach (IntegerStringPair thisPair in this.PairSet) { while (input >= thisPair.Value) { myBuilder.Append(thisPair.StringValue); input -= thisPair.Value; } } return myBuilder.ToString(); } private List<IntegerStringPair> PairSet { get { if (this.romanStrings == null) { this.romanStrings = new List<IntegerStringPair>(); this.romanStrings.Add(new IntegerStringPair(1000, "M")); this.romanStrings.Add(new IntegerStringPair(900, "CM")); this.romanStrings.Add(new IntegerStringPair(500, "D")); this.romanStrings.Add(new IntegerStringPair(400, "CD")); this.romanStrings.Add(new IntegerStringPair(100, "C")); this.romanStrings.Add(new IntegerStringPair(90, "XC")); this.romanStrings.Add(new IntegerStringPair(50, "L")); this.romanStrings.Add(new IntegerStringPair(40, "XL")); this.romanStrings.Add(new IntegerStringPair(10, "X")); this.romanStrings.Add(new IntegerStringPair(9, "IX")); this.romanStrings.Add(new IntegerStringPair(5, "V")); this.romanStrings.Add(new IntegerStringPair(4, "IV")); this.romanStrings.Add(new IntegerStringPair(1, "I")); } return this.romanStrings; } } } /// <summary> /// IntegerStringPair provides an easy way to store integerandstring pairs. /// </summary> public class IntegerStringPair { private int value; private string stringValue; public int Value { get { return this.value; } } public string StringValue { get { return this.stringValue; } } public IntegerStringPair(int value, string stringValue) { this.value = value; this.stringValue = stringValue; } } }
Para aplicar un convertidor de valores a una propiedad
En el siguiente procedimiento, se aplican los convertidores de valores cuando se enlaza el valor de un objeto Slider a dos objetos Label, de modo que los objetos Label muestran las representaciones de entero y número romano del valor de Slider.
- Agregue el archivo DoubleValueConverter.cs al proyecto de Expression Blend. En el menú Proyecto, haga clic en Agregar elemento existente, busque el archivo DoubleValueConverter.cs y haga clic en Abrir.

También puede generar el archivo DoubleValueConverter.cs como un archivo .dll y agregar una referencia a este archivo .dll en el proyecto. - Genere el proyecto (Ctrl+Mayús+B) para hacer que las clases de convertidor de valores estén disponibles en el proyecto.
- Desde el Cuadro de herramientas, agregue dos controles Label y un control Slider al área de diseño. Colóquelos de forma que dispongan de suficiente espacio.
- Con el objeto Slider seleccionado en Objetos y escala de tiempo, establezca las siguientes propiedades en Propiedades comunes, en el panel Propiedades:
- Establezca LargeChange en 10. Se trata del cambio incremental que se produce al hacer clic en el control Slider.
- Establezca Maximum en 2001. El intervalo de valores de Slider será de 0 a 2001.
- Establezca SmallChange en 1. Se trata del cambio incremental que se produce al usar las teclas de dirección para mover el control Slider.
- Con el primer objeto Label seleccionado en Objetos y escala de tiempo, haga clic en la propiedad Content en Propiedades comunes, en el panel Propiedades. Haga clic en Enlace de datos en la lista desplegable que se muestra.
Se abrirá el cuadro de diálogo Crear enlace de datos. - En la ficha Propiedad del elemento, seleccione Slider en el árbol de elementos de Elementos de la escena.
- En la ficha Propiedad del elemento, seleccione Value : (Double) en Propiedades. De este modo, se enlazará el contenido de Label al valor de Slider.
- Haga clic en el botón Expandir
en el cuadro de diálogo Crear enlace de datos para ver la configuración avanzada. - Al lado del cuadro desplegable Convertidor de valores, haga clic en el botón Agregar nuevo convertidor de valores.
Se abrirá el cuadro de diálogo Agregar convertidor de valores. - Expanda el nombre del proyecto y el espacio de nombres Microsoft.Expression.Samples, seleccione DoubleToIntegerValueConverter y haga clic en Aceptar.

Si no ve el convertidor de valores, asegúrese de que ha agregado el archivo de origen al proyecto y de que ha generado el proyecto (Ctrl+Mayús+B). - En el cuadro de diálogo Crear enlace de datos, haga clic en Finalizar.
El primer objeto Label mostrará ahora una representación de entero de Slider.
Observe que al objeto Slider se le ha asignado el nombre Slider. Los objetos de la aplicación deben tener nombre para poder hacer referencia a ellos desde cualquier lugar de la aplicación, por ejemplo, durante el enlace de datos. Expression Blend les asigna un nombre de forma automática. - Repita los pasos 5 a 11 con el segundo objeto Label, pero seleccione DoubleToRomanNumeralValueConverter en el cuadro de diálogo Agregar convertidor de valor.
- Pruebe el proyecto (F5). Mueva el control Slider para ver los valores actualizados en los dos objetos Label.

