stringformat c# .net wpf ivalueconverter

c# - stringformat wpf



¿Para qué sirve el método ConvertBack en la interfaz IValueConverter? (3)

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

¿Cuándo llamará?

O cuál es el orden de invocación del método Convert y ConvertBack .

He hecho una pregunta aquí porque: he vinculado una propiedad de código detrás de la propiedad TEXT de TEXTBOX y uso el convertor para esa propiedad,

luego primero invoque Método de conversión y cuando cambio TEXT en TEXTBOX no ocurre nada, pero tan pronto como cierre el formulario, ConvertBack método ConvertBack .

¿Qué es esto? No hay reglas que definan cuándo disparar el método ConvertBack ?

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


IMO, el método ConvertBack se usa 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 ConvertBack método ConvertBack tan pronto como el enlace se dispare nuevamente (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" a 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.

Espero que esto esté un poco claro ...

ACTUALIZAR
Sobre tu pregunta en el comentario:
Para sobrescribir el comportamiento de enlace predeterminado de OnFocusLost , debe cambiar su enlace de esta manera:

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



ConvertBack es cuando tienes mode=TwoWay en tu enlace.

Convierte la entrada del usuario en el tipo de datos al que se está vinculando y se invoca cuando 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ía el valor y lo formateará en una cadena con el símbolo de moneda correcto, el separador decimal, etc.

Si el usuario escribe un nuevo valor, incluidos posibles símbolos 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 posibles entradas y las convertiría al formato único que necesita.