2011-03-23 16 views
10

Sé que cuando los datos están a punto de mostrarse, se llama al método Convert() para convertir los datos y se muestran los datos convertidos.¿Cuándo se llama al método ConvertBack?

Me pregunto cuándo se llama al método ConvertBack()? ¿Cual es su propósito?

Tengo DataGrid cuyo ItemSource está vinculado a alguna colección, y he implementado IValueConverter para una propiedad de los elementos de la colección. Cuando hago IsReadOnly="True" (en el DataGrid), se llama al método ConvertBack si hago doble clic en la celda (para la cual se implementó IValueConverter) y luego cambio el foco. Pero cuando hago IsReadOnly="False", nunca se llama al método ConvertBack, no importa lo que haga con el DataGrid y sus celdas.

Explica este comportamiento de DataGrid celdas y ConvertBack método de IValueConverter.

+1

Se llama cuando el modo de unión es TwoWay (modo por defecto para TextBox.Text y probablemente para CheckBox.IsChecked). Si configura OneWay explícitamente, el método no se llamará, creo. – vorrtex

+0

También estoy teniendo este problema. Si me enlace directamente a un 'DataTable', la fuente se actualiza en' CellEditEnding'. Si me sumo a un tipo diferente de objeto y uso un convertidor en el enlace para convertirlo en un 'DataTable' sobre la marcha' ConvertBack' nunca se llama. Es decir, las ediciones de usuario no se propagan a la fuente. Me pregunto si necesito derivar mi propia 'DataTable' y agregarle algún tipo de lógica de notificación. Publicaré si encuentro una solución. –

Respuesta

8

"El motor de enlace de datos llama a este método cuando propaga un valor desde el destino de enlace al origen de enlace."

ver msdn

que usted debe fijar su unión para su celda con el valueconverter

+1

Entonces, si no quiere que se propague nuevamente a la fuente, ¿hace que el enlace Mode = OneWay? – steviesama

Cuestiones relacionadas