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