2011-02-02 42 views
11

Tôi đã triển khai WPF DataGrid Single-Click Editing từ Codeplex. Trong giải pháp đó, ô được nhấp được tập trung và hàng được chọn để đạt được chỉnh sửa một cú nhấp chuột của DataGrid. Nó hoạt động rất tốt.WPF DataGrid - Làm thế nào để tự động thoát khỏi Chế độ chỉnh sửa?

Dưới đây là các mã:

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

Nhưng tôi cũng muốn DataGrid của tôi để tự động thoát khỏi chế độ chỉnh sửa (mà không cần nhấn phím Enter) khi một giá trị tế bào bị thay đổi. Ví dụ, tôi có một combobox trong ô khi ở chế độ chỉnh sửa. Khi người dùng chọn một giá trị trong combobox, nó sẽ tự động databind giá trị được chọn. Nhưng sau đó người dùng vẫn cần phải nhấn Enter để thoát khỏi chế độ chỉnh sửa. Làm cách nào để thoát chế độ chỉnh sửa tự động?

Tôi đã thử nghe các thay đổi về thuộc tính và gọi chức năng CommitEdit của DataGrid để thoát chế độ chỉnh sửa tự động. Công trình tuyệt vời và đây là mã:

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

    } 

Nhưng bây giờ tính năng chỉnh sửa một lần nhấp sẽ không hoạt động đối với ô hiện tại. Tôi phải nhấp vào một hàng khác trước để nó hoạt động. Tôi nghĩ rằng những gì tôi muốn là khi CommmitEdit được gọi, nó sẽ tự động chọn một hàng khác nhau . (Giống như khi bạn nhấn Enter, nó sẽ chuyển đến hàng tiếp theo) Bất kỳ kẻ đề xuất nào? Vui lòng chỉ cho tôi mã về cách thực hiện việc này. Im hết thời gian ở đây cho dự án của tôi.

Cảm ơn sự giúp đỡ.

+0

Có gì giá trị của 'cell' trong' phương pháp PreviewMouseLeftButtonDown' sau khi bạn đã lập trình được gọi là CommitEdit()? Tại sao phương thức không đạt được 'cell.IsSelected = true'? – Pakman

Trả lời

7

để lật từ biên tập tế bào mẫu trở lại mẫu di động:

dataGrid.CancelEdit(); 
Các vấn đề liên quan