private static void DataGridLoaded(DataGrid dataGrid) { if (VisualTreeHelperEx.FindChildren <ScrollViewer>(dataGrid).FirstOrDefault() is ScrollViewer scrollViewer) { SetSenderDataGrid(scrollViewer, dataGrid); scrollViewer.ScrollChanged += ScrollViewerOnScrollChanged; } }
private static void ScrollViewerOnScrollChanged(object sender, ScrollChangedEventArgs e) { if (sender is ScrollViewer scrollViewer) { if (VisualTreeHelperEx.FindChildren <ScrollBar>(scrollViewer).FirstOrDefault(s => s.Orientation == Orientation.Vertical) is ScrollBar verticalScrollBar) { DataGrid dataGrid = GetSenderDataGrid(scrollViewer); int totalCount = dataGrid.Items.Count; int firstVisible = (int)verticalScrollBar.Value; int lastVisible = (int)(firstVisible + totalCount - verticalScrollBar.Maximum); SetVisibleItems(dataGrid, GetVisibibleItems(firstVisible, lastVisible, dataGrid).ToArray()); } }