Получить отредактированный элемент GridView, когда EditingElement неизвестен - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть UserControl, который в основном является оболочкой для GridView, который должен отправлять сообщение каждый раз, когда изменяется содержимое ячейки (GridView).Обычно это может быть решено так:

private void MainDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
        var editingTextBox = e.EditingElement as TextBox;
        doSomething(editingTextBox.Text);
    }

Проблема в том, что я не знаю тип EditingElement (который поставляется как FrameworkElement), поэтому я не могу выполнить преобразование.И в этот момент currentCell.SelectedValue все еще является исходным значением.У меня также нет контроля над моделью (где я мог бы реализовать INotifyPropertyChanged и использовать ее для отслеживания изменений).

Есть ли какой-то простой способ, которого мне не хватает?Или как бы вы реализовали это?Спасибо за любые предложения.

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Оберните вашу модель в CollectionView и используйте ее для привязки.

myCollectionView = (CollectionView)
    CollectionViewSource.GetDefaultView(rootElem.DataContext);

Это обеспечит вам INotifyPropertyChanged интерфейс.

Обновление Извините, мой первый ответ несколько вводил в заблуждение.

Если вы не можете изменить модель, вам следует создать модель представления.Модель представления, реализующая INotifyPropertyChanged, может обеспечить необходимые события изменения без знания текущего представления.Таким образом, представление не зависит напрямую от модели.

Дальнейшее чтение: Роль модели в MVVM

0 голосов
/ 15 февраля 2012

Я нашел очень простое решение (не могу поверить, я его не видел), состоящее из перехвата двух событий из DataGrid.Вот код:

private object changedRow;

    private void MainDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
        changedRow = e.Row.Item;
    }

    private void MainDataGrid_CurrentCellChanged(object sender, EventArgs e)
    {
        if (changedRow != null)
        {
            // do something with the edited row here
            changedRow = null;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...