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