WPF DataGrid - Как автоматически выйти из режима редактирования? - PullRequest
11 голосов
/ 03 февраля 2011

Я реализовал WPF DataGrid Редактирование одним щелчком из Codeplex.В этом решении выбранная ячейка фокусируется, и строка выбирается для редактирования DataGrid одним щелчком мыши.Он работал отлично.

Вот код:

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

Но я также хочу, чтобы моя DataGrid автоматически выходила из режима редактирования (без нажатия клавиши Enter), когда значение ячейки изменяется.Например, у меня есть поле со списком в ячейке, когда в режиме редактирования.Когда пользователь выбирает значение в выпадающем списке, оно автоматически связывает выбранное значение с данными.Но затем пользователю все равно нужно нажать Enter, чтобы выйти из режима редактирования.Как я могу выйти из режима редактирования автоматически?

Я попытался прослушать изменения свойств и вызвать функцию CommitEdit в DataGrid для автоматического выхода из режима редактирования.Отлично работает, и вот код:

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

    }

Но теперь функция редактирования одним щелчком не будет работать для текущей ячейки.Я должен сначала щелкнуть по другой строке, чтобы она заработала.Я думаю, что я хочу, чтобы при вызове CommmitEdit он автоматически выбирал другую строку.(Например, когда вы нажмете Enter, он перейдет к следующему ряду) Есть предложения, ребята?Пожалуйста, покажите мне коды, как это сделать.У меня заканчивается время для моего проекта.

Спасибо за помощь.

1 Ответ

9 голосов
/ 27 апреля 2011

для переключения из шаблона редактирования ячейки обратно в шаблон ячейки:

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