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.-->
verifique la propiedad UpdateSourceTrigger en su enlace. http://msdn.microsoft.com/library/system.windows.data.binding.updatesourcetrigger.aspx
El cuadro de texto actualizará la fuente de forma predeterminada si pierde el foco, utilizando UpdateSourceTrigger puede establecer este comportamiento para la actualización inmediata de la fuente si el contenido de la caja de texto cambia.
HTH Dominik
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.