WPF DataGrid, как получить, когда обновления ItemsSource

Какое событие срабатывает при обновлении источника DataGrid? Я пробовал DataContextChanged и SourceUpdated, но он никогда не работал.

На самом деле мне нужна простая вещь. Я хочу, если появится новая строка, прокрутите полосу прокрутки GridView донизу, чтобы узнать, что это было.

Ответы

Ответ 1

У меня была та же проблема, и я справляюсь с ней таким образом

DataGrid myGrid = new DataGrid();
CollectionView myCollectionView = (CollectionView)CollectionViewSource.GetDefaultView(myGrid.Items);
((INotifyCollectionChanged)myCollectionView).CollectionChanged += new NotifyCollectionChangedEventHandler(DataGrid_CollectionChanged);

Затем вам нужно реализовать логику в обработчике событий DataGrid_CollectionChanged.

Ответ 2

Установить NotifyOnTargetUpdated = true для привязки ItemsSource и обработать событие TargetUpdated. Если у вас несколько привязок, тогда найдите свойство DataTransferEventArgs, чтобы узнать, является ли цель ItemsSource или нет.

Ответ 3

Если вы пытаетесь обновить сетку, когда что-то добавляется к самой базе данных, этого не произойдет. Я больше знаком с WinForms, чем с WPF, но я предполагаю, что нет волшебного способа держать сетку в синхронизации с базой данных без написания какого-либо фонового процесса, который постоянно проверяет изменения базы данных.

Если вы обновляете фактический источник данных сетки (например, Collection), то это обновит сетку.

Ответ 4

Со своей стороны я использовал уведомление SelectionChange, которое поднимает каждое событие Del/Add/Edit/Select Он работает очень хорошо

private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Console.WriteLine("hi");
}