2011-06-21 5 views
33

¿Cuál es el uso del método ConvertBack en la interfaz IValueConverter?¿Cuál es el uso del método ConvertBack en la interfaz IValueConverter?

¿Cuándo llamará?

O lo que es el orden de la invocación deConvert y ConvertBack método.

Tengo haga la pregunta aquí porque: he obligado una propiedad de código subyacente al texto de TEXTBOX la propiedad y el uso de convertor para esa propiedad,

entonces primera Convert Método invocar y cuando cambio TEXT en TEXTBOX nada sucederá tan pronto como cierre el formulario ConvertBack invoque el método.

¿qué es esto, no hay ninguna reglas que definencuando al fuegoConvertBack método?

NOTA: es posible que se encuentre duplicado de otra pregunta en este sitio ... pero no he encontrado ninguna pregunta que utilice completa en la lista de sugerencias cuando escribo mi pregunta.

Respuesta

34

OMI, el método ConvertBack se utiliza para convertir su representación visual de los datos al tipo de datos específico.

Por ejemplo: utiliza un convertidor para convertir un booleano true en la cadena "TrueBoolean". Este texto se mostrará en su TextBox. Cuando cambie el valor de TextBox, se llamará al método ConvertBack tan pronto como el enlace se dispare de nuevo (OnFocusLost predeterminado). Ahora su método ConvertBack intentará convertir el nuevo valor al tipo de datos que desea que sea. Por lo tanto, deberá implementar la lógica para convertir "FalseBoolean" en false.

public class Converter : IValueConverter 
{ 
    object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return (bool) value ? "TrueBoolean" : "FalseBoolean"; 
    } 

    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var s = (string) value; 
     if (s.Equals("TrueBoolean",StringComparison.CurrentCultureIgnoreCase)) 
      return true; 
     if (s.Equals("FalseBoolean", StringComparison.CurrentCultureIgnoreCase)) 
      return false; 
     throw new Exception(string.Format("Cannot convert, unknown value {0}", value)); 
    } 
} 

Esta técnica se usa mucho en DataGrids si no me equivoco.

Hope esto es un poco claro ...

ACTUALIZACIÓN
Sobre usted pregunta en el comentario:
para sobrescribir el comportamiento de enlace predeterminada OnFocusLost usted tiene que cambiar su unión como esta:

<TextBox Text="{Binding MyText, UpdateSourceTrigger=PropertyChanged}"/> 
<!--syntax might differ, can't access VS at the moment.--> 
+0

@Roel, pero en mi caso ConvertBack es fuego cuando cierro la ventana, ¿no es extraño? –

+1

no, creo que esto es un comportamiento normal: antes de que se cierre la ventana, se disparará el evento OnFocusLost del TextBox, o al menos el enlace se actualizará. – RoelF

+0

@Roel, ¿qué debo hacer si necesito tener el método Call ConvertBack tan pronto como se realice algún cambio en TEXT of TEXTBOX? no pude encontrar la fuente de activación de fuente de actualización como @Dominik dice ... –

28

ConvertBack es cuando tiene mode=TwoWay en su encuadernación.

Convierte la entrada del usuario de nuevo en el tipo de datos al que se está vinculando y se invoca cuando el TextBox (por ejemplo) pierde el foco.

Por ejemplo (si esto no estaba incorporado), si tiene un número que representa un precio, el método Convert tomará el valor y lo formateará en una cadena con el símbolo de moneda correcto, separador decimal etc.

Si el usuario escribe un nuevo valor, incluido un posible símbolo de moneda, separador de miles, etc., utilizará el método ConvertBack para analizar la cadena y extraer el valor numérico.

Otro ejemplo podría ser la entrada del número de tarjeta de crédito. El usuario puede ingresar el número como una sola cadena de dígitos o grupos de dígitos separados por espacios o guiones. El método ConvertBack tomaría todas estas entradas posibles y las convertiría al formato único que necesita.

Cuestiones relacionadas