2011-02-02 9 views
11

Implementé WPF DataGrid Single-Click Editing de Codeplex. En esa solución, la celda cliqueada se enfoca y la fila se selecciona para lograr la edición con un solo clic de DataGrid. Funcionó muy bien.WPF DataGrid: cómo salir automáticamente del modo de edición?

Aquí está el código:

private void DataGridCell_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     DataGridCell cell = sender as DataGridCell; 
     if (cell != null && !cell.IsEditing && !cell.IsReadOnly) 
     { 
      if (!cell.IsFocused) 
      { 
       cell.Focus(); 
      } 
      DataGrid dataGrid = FindVisualParent<DataGrid>(cell); 
      if (dataGrid != null) 
      { 
       if (dataGrid.SelectionUnit != DataGridSelectionUnit.FullRow) 
       { 
        if (!cell.IsSelected) 
         cell.IsSelected = true; 
       } 
       else 
       { 
        DataGridRow row = FindVisualParent<DataGridRow>(cell); 
        if (row != null && !row.IsSelected) 
        { 
         row.IsSelected = true; 
        } 
       } 
      } 
     } 
    }  

pero también quiero mi DataGrid para salir automáticamente del modo de edición (sin golpear la tecla Enter) cuando se cambia un valor de la celda. Por ejemplo, tengo un cuadro combinado en la celda cuando estoy en modo de edición. Cuando el usuario selecciona un valor en el cuadro combinado, enlazará automáticamente el valor seleccionado. Pero luego el usuario aún necesita hacer clic en Entrar para salir del modo de edición. ¿Cómo puedo salir del modo de edición automáticamente?

He intentado escuchar a los cambios de propiedad y la llamada a la función CommitEdit de DataGrid para salir del modo de edición de forma automática. Funciona muy bien y aquí está el código:

void _gameCompareViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) 
    { 
     if (e.PropertyName == "End Edit") 
     { 
      AlignGrid.CommitEdit(); 
     } 

    } 

Pero ahora la función de edición de un solo clic no funcionará para la celda actual. Primero tengo que hacer clic en una fila diferente para que funcione. Creo que lo que quiero es que cuando se llame a CommmitEdit, seleccione automáticamente una fila diferente de . (Al igual que cuando presionas Enter, irá a la siguiente fila) ¿Alguna sugerencia, chicos? Por favor, muéstrame códigos sobre cómo hacer esto. Me estoy quedando sin tiempo aquí para mi proyecto.

Gracias por la ayuda.

+0

¿cuál es el valor de 'cell' en el método' PreviewMouseLeftButtonDown' Después de llamar mediante programación CommitEdit()? ¿Por qué el método no puede alcanzar 'cell.IsSelected = true'? – Pakman

Respuesta

7

para voltear de una plantilla de edición de celdas a la plantilla de la célula:

dataGrid.CancelEdit(); 
Cuestiones relacionadas