WPF DataGrid имеет RowEditEnding, но не RowEditEnded - PullRequest
10 голосов
/ 11 октября 2010

Я привязал ObservableCollection к DataGrid. Когда я изменяю значения в DataGrid, возникает событие RowEditEnding. Но e.Row.Item является объектом перед редактированием, поэтому вы не видите новые значения. Я понимаю это из-за EditEnding. В Silverlight у вас есть событие EditEnded, как я могу получить объект с новыми значениями при редактировании DataGrid.

спасибо,

Filip

Ответы [ 5 ]

9 голосов
/ 20 ноября 2012

С http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/c38fc695-d1ec-4252-87b7-feb484ee01e4/, изменить UpdateSourceTrigger привязки к PropertyChanged.Затем свойство будет немедленно обновлено перед событием RowEditEnding, и новое значение можно будет получить из обработчика событий RowEditEnding.

Например, для DataGridComboBoxColumn

SelectedItemBinding="{Binding ForTestResult, UpdateSourceTrigger=PropertyChanged}"

Это кажетсяочень простой способ решения этой проблемы.

Кроме того, хотя я не пробовал его, я думаю, что должно быть легко получить доступ к исходному значению перед редактированием, если ваш объект реализует IEditableObject.

6 голосов
/ 11 октября 2010

Ну, может быть, это может помочь: http://wpf.codeplex.com/Thread/View.aspx?ThreadId=39356

http://blogs.msdn.com/b/vinsibal/archive/2009/04/14/5-more-random-gotchas-with-the-wpf-datagrid.aspx

Или это, см. Пункт № 5.

Вам придется повозиться с этим, чтобы получить то, что вы хотите, я думаю, но я надеюсь, что это поможет! Или указывает вам правильное направление.

1 голос
/ 07 февраля 2014

Это решение кажется достаточно простым.По ссылке с msdn forum .

private void dgEmployees_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{           
    Action action = delegate
                  {
                     Employee emp = e.Row.Item as Employee;
                    //do something nice to the employee                
                   };
    Dispatcher.BeginInvoke(action, System.Windows.Threading.DispatcherPriority.Background);
}
0 голосов
/ 15 сентября 2017

Мой самый свежий и IMHO самый быстрый способ - добавить bool rowEdited=false, затем установить его на true внутри DataGrid_RowEditEnding и поместить свой код для 'editEnded' внутри DataGrid_LayoutUpdated:

if (rowEdited)
{
    //main code here//
    rowEdited=false;
}

.

0 голосов
/ 27 ноября 2010

Присоединить к измененному событию ObservableCollection.

Я привязался к DataTable и использовал событие RowChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...