2011-02-02 16 views
11

Zaimplementowałem WPF DataGrid Single-Click Editing z Codeplex. W tym rozwiązaniu kliknięta komórka jest skupiona, a wiersz jest wybrany, aby uzyskać edycję DataGrid za pomocą jednego kliknięcia. To działało świetnie.WPF DataGrid - Jak automatycznie wyjść z trybu edycji?

Oto kod:

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; 
        } 
       } 
      } 
     } 
    }  

Ale chcę mój DataGrid automatycznie wyjść z trybu edycji (bez uderzania klawisz Enter) gdy wartość komórki jest zmieniony. Na przykład, mam combobox w komórce, gdy w trybie edycji. Gdy użytkownik wybierze wartość w combobox, automatycznie wyznaczy databind dla wybranej wartości. Ale wtedy użytkownik nadal musi kliknąć Enter, aby wyjść z trybu edycji. Jak mogę automatycznie wyjść z trybu edycji?

Próbowałem już nasłuchiwać zmian właściwości i wywoływać funkcję CommitEdit DataGrid, aby wyjść z trybu edycji automatycznie. Działa świetnie i oto kod:

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

    } 

Ale teraz funkcja edycji pojedynczego kliknięcia nie będzie działać dla bieżącej komórki. Muszę najpierw kliknąć inny wiersz, aby działał. Myślę, że to, czego chcę, to gdy wywoływana jest komenda CommmitEdit, automatycznie wybiera ona inny wiersz . (Tak jak po naciśnięciu Enter, przejdzie on do następnego wiersza) Jakieś sugestie facetów? Pokaż mi kody, jak to zrobić. Mam tu mało czasu na mój projekt.

Dzięki za pomoc.

+0

Jaka jest wartość '' cell' w metodzie PreviewMouseLeftButtonDown' po tym, jak programowo nazywa CommitEdit()? Dlaczego metoda nie osiąga wartości 'cell.IsSelected = true'? – Pakman

Odpowiedz

7

odwrócić od edycji komórek szablonu do szablonu komórkowy:

dataGrid.CancelEdit();