2011-06-06 14 views
6

Tengo este pequeño problema con la cuadrícula de datos.WPF datagrid: confirma los cambios en una columna de casilla de verificación tan pronto como se cambia el valor

En mi cuadrícula tengo una columna de casilla de verificación que es la única columna editable.

El comportamiento que estoy buscando es que la cuadrícula de datos actualice el origen de datos de i tan pronto como cambie el estado de la casilla de verificación. De modo que el usuario verifica/desmarca la casilla> la tabla de datos subyacente se actualiza.

El comportamiento predeterminado parece actualizar la fuente cuando la fila pierde el foco, lo que requiere que el usuario presione una tecla o haga clic en algún otro control para guardar los cambios.
¿Cómo puedo cambiar este comportamiento?

No veo ninguna propiedad para la cuadrícula de datos que podría hacer esto y ningún evento CheckChanged para DataGridCheckBoxColumn.

Respuesta

4

La cuadrícula de datos en sí establece el UpdateSourceTrigger para todas las columnas (aparte de las columnas de la plantilla) para ser LostFocus y esto no se puede anular. De ahí la necesidad de utilizar columnas de plantilla con una plantilla de casilla de verificación.

EDITAR: Esta es solo una de una larga lista de tontos gotchas alrededor de las columnas de DataGrid. Más se describen here.

+0

Y aquí hay más [capturas de DataGrid] (https://blogs.msdn.microsoft.com/vinsibal/2009/04/14/5-more-random-gotchas-with-the-wpf-datagrid/). –

11

Necesita la propiedad UpdateSourceTrigger en la encuadernación de la columna. Aquí está un ejemplo rápido, puede carne hacia fuera y llenar los espacios en blanco:

<DataGrid x:Name="someGrid"> 
    <DataGrid.Columns> 
     <DataGridCheckBoxColumn Binding="{Binding SomeProperty, UpdateSourceTrigger=PropertyChanged}" /> 
    </DataGrid.Columns> 
</DataGrid> 
+0

Ya configuré UpdateSourceTrigger = PropertyChanged donde ato la tabla de datos a la grilla en el código subyacente. ¿No debería ser eso suficiente? –

+0

Intenté establecer el enlace para la columna de esta manera [Encuadernación = "{Ruta de encuadernación = terminado, UpdateSourceTrigger = PropertyChanged}"] (terminado es una columna en mi tabla de datos) pero es el mismo comportamiento. –

+2

Sí, hice algunas pruebas. Parece que el problema radica en la propia cuadrícula de datos, no en el enlace. No 'finaliza' el modo de edición hasta que la celda haya perdido el foco. –

Cuestiones relacionadas