public async void ChapterSelectButton_Click(object sender, RoutedEventArgs e)
        {
            var chapterSelectionWindow = new ChapterSelectionWindow(reqsCollection);

            chapterSelectionWindow.ShowDialog();
            if (chapterSelectionWindow.DialogResult == true)
            {
                Mouse.OverrideCursor = Cursors.Wait;
                if (chapterSelectionWindow.ClearPreviousTCs)
                {
                    RefreshRequirementsDataGrid();
                    AllTCsListBox.SelectedItems.Clear();
                    RequirementsDataGrid.UpdateLayout();
                }

                var selectedChapter = chapterSelectionWindow.Answer;
                Console.WriteLine(selectedChapter.chapter);
                await ShowOneChapter(selectedChapter.id, chapterSelectionWindow.SelectTCs);

                ChapterNameTextBlock.Text = selectedChapter.chapter;
                Mouse.OverrideCursor      = Cursors.Arrow;
            }
        }
        private async Task RefreshHelpers(bool horizontalRefresh, bool verticalRefresh, double horizontalOffset, double verticalOffset, double verticalChange = 0)
        {
            if (horizontalRefresh)
            {
                new List <ScrollViewer>()
                {
                    GetScrollViewer(ReqHelperTop),
                    GetScrollViewer(ReqHelperBottom)
                }.ForEach(x => x.ScrollToHorizontalOffset(horizontalOffset));
            }

            if (verticalRefresh)
            {
                var datagridHeight = RequirementsDataGrid.ActualHeight;
                var rowHeight      = RequirementsDataGrid.RowHeight;
                var firstRow       = (int)verticalOffset;
                var lastRow        = firstRow + (int)(datagridHeight / rowHeight) - 1;

                if (reqsCollection.AsParallel().Any(x => x.IsVisible == false))
                {
                    var firstVisible = RequirementsDataGrid.Items
                                       .IndexOf(RequirementsDataGrid.Items.Cast <RequirementSingleView>()
                                                .First(x => x.IsVisible == true));
                    var lastVisible = RequirementsDataGrid.Items
                                      .IndexOf(RequirementsDataGrid.Items.Cast <RequirementSingleView>()
                                               .Last(x => x.IsVisible == true));

                    if (lastVisible < lastRow)
                    {
                        lastRow = lastVisible + 1;
                    }

                    if (verticalChange < 0 && firstRow < firstVisible)
                    {
                        var scrollViewer = GetScrollViewer(RequirementsDataGrid);
                        scrollViewer.ScrollToVerticalOffset(firstVisible);
                    }
                    else if (verticalChange > 0 && lastVisible < firstRow)
                    {
                        var scrollViewer = GetScrollViewer(RequirementsDataGrid);
                        scrollViewer.ScrollToVerticalOffset(lastVisible);
                    }
                }

                var selectedTCs = new List <int>();
                foreach (int TC in AllTCsListBox.SelectedItems)
                {
                    selectedTCs.Add(TC);
                }


                Parallel.ForEach(selectedTCs, TCSelected =>
                {
                    var TCSelectedString = TCSelected.ToString();
                    if (ReqTopHelperData[0].ContainsKey(TCSelectedString))
                    {
                        var firstOccurence = RequirementsDataGrid.Items.Cast <RequirementSingleView>()
                                             .TakeWhile(x => x.TCIDsValue.Contains(TCSelected) != true)
                                             .Count();

                        if (firstOccurence < firstRow)
                        {
                            ReqTopHelperData[0][TCSelectedString] = true;
                        }
                        else
                        {
                            ReqTopHelperData[0][TCSelectedString] = false;
                        }
                    }

                    if (ReqBottomHelperData[0].ContainsKey(TCSelectedString))
                    {
                        var lastOccurence = RequirementsDataGrid.Items.Cast <RequirementSingleView>().Count() - RequirementsDataGrid.Items.Cast <RequirementSingleView>()
                                            .Reverse()
                                            .TakeWhile(x => x.TCIDsValue.Contains(TCSelected) != true)
                                            .Count();

                        if (lastOccurence > lastRow)
                        {
                            ReqBottomHelperData[0][TCSelectedString] = true;
                        }
                        else
                        {
                            ReqBottomHelperData[0][TCSelectedString] = false;
                        }
                    }
                });
            }
            RequirementsDataGrid.UpdateLayout();
            ReqHelperTop.Items.Refresh();
            ReqHelperBottom.Items.Refresh();
        }