private void ColumnHeader_DoubleClickEvent(object sender, MouseButtonEventArgs e)
        {
            var header = (System.Windows.Controls.Primitives.DataGridColumnHeader)sender;

            var tcID = (int)header.Content;

            var firstOccurence = RequirementsDataGrid.Items.Cast <RequirementSingleView>()
                                 .TakeWhile(x => x.TCIDsValue.Contains(tcID) != true)
                                 .Count();

            var lastOccurence = RequirementsDataGrid.Items.Cast <RequirementSingleView>().Count() - RequirementsDataGrid.Items.Cast <RequirementSingleView>()
                                .Reverse()
                                .TakeWhile(x => x.TCIDsValue.Contains(tcID) != true)
                                .Count();

            RequirementsDataGrid.ScrollIntoView(RequirementsDataGrid.Items[lastOccurence]);

            RequirementsDataGrid.ScrollIntoView(RequirementsDataGrid.Items[firstOccurence]);
        }
        private void Helper_LeftClickEvent(object sender, MouseButtonEventArgs e)
        {
            var gridCell = (DataGridCell)sender;
            var tc       = (int)gridCell.Column.Header;

            var senderDatagrid = VisualTreeHelper.GetParent(gridCell);

            while (senderDatagrid != null && senderDatagrid.GetType() != typeof(DataGrid))
            {
                senderDatagrid = VisualTreeHelper.GetParent(senderDatagrid);
            }

            var isGoingDown = ((DataGrid)senderDatagrid).Name == nameof(ReqHelperBottom);

            var selectedRows = RequirementsDataGrid.SelectedItems.Count;

            if (selectedRows >= 1)
            {
                var firstSelected = (RequirementSingleView)RequirementsDataGrid.SelectedItems[0];
                RequirementsDataGrid.SelectedItems.Clear();

                if (firstSelected.TCIDsValue.Contains(tc))
                {
                    RequirementsDataGrid.SelectedItems.Add(firstSelected);
                }
                else
                {
                    RequirementsDataGrid.SelectedItems.Add(RequirementsDataGrid.Items.Cast <RequirementSingleView>().First(x => x.TCIDsValue.Contains(tc) && x.IsVisible));
                    RequirementsDataGrid.ScrollIntoView(firstSelected);
                    return;
                }

                RequirementsDataGrid.ScrollIntoView(firstSelected);

                if (selectedRows > 1)
                {
                    return;
                }


                RequirementsDataGrid.SelectedItems.Clear();
                var reqs = RequirementsDataGrid.Items.Cast <RequirementSingleView>().AsEnumerable();
                if (isGoingDown == false)
                {
                    reqs = reqs.Reverse();
                }

                RequirementsDataGrid.SelectedItems
                .Add(reqs
                     .SkipWhile(x => x != firstSelected)
                     .Skip(1)
                     .FirstOrDefault(x => x.TCIDsValue.Contains(tc) && x.IsVisible));

                if (RequirementsDataGrid.SelectedItem == null)
                {
                    RequirementsDataGrid.SelectedItems.Add(firstSelected);
                }

                RequirementsDataGrid.ScrollIntoView(RequirementsDataGrid.SelectedItem);
            }
            else
            {
                RequirementsDataGrid.SelectedItems.Add(RequirementsDataGrid.Items.Cast <RequirementSingleView>().First(x => x.TCIDsValue.Contains(tc) && x.IsVisible));
                RequirementsDataGrid.ScrollIntoView((RequirementSingleView)RequirementsDataGrid.SelectedItems[0]);
            }
        }