private void PopulateControls(RackoGameContainer mainGame)
        {
            _thisStack !.Children.Clear();
            int starts   = mainGame.PlayerList.Count() + 2;
            int diffs    = starts;
            var tempList = _cardList !.ToRegularDeckDict();

            tempList.Reverse();
            int x;
            CustomBasicList <int> otherList = new CustomBasicList <int>();

            for (x = 1; x <= 10; x++)
            {
                otherList.Add(starts);
                starts += diffs;
            }
            otherList.Reverse();
            foreach (var thisCard in tempList)
            {
                Grid thisGrid = new Grid();
                thisGrid.BindingContext = thisCard; // i think
                GridHelper.AddPixelColumn(thisGrid, 100);
                GridHelper.AddAutoColumns(thisGrid, 1);
                var thisLabel = GetDefaultLabel();
                thisLabel.HorizontalOptions = LayoutOptions.Center;
                thisLabel.VerticalOptions   = LayoutOptions.Center;
                thisLabel.Text     = otherList[tempList.IndexOf(thisCard)].ToString();
                thisLabel.FontSize = 40;
                thisLabel.Margin   = new Thickness(0, 3, 0, 0);
                GridHelper.AddControlToGrid(thisGrid, thisLabel, 0, 0);
                CardGraphicsXF ThisGraphics = new CardGraphicsXF();
                ThisGraphics.SendSize("", thisCard); //hopefully this simple.
                GridHelper.AddControlToGrid(thisGrid, ThisGraphics, 0, 1);
                RowClickerXF custom = new RowClickerXF();
                custom.Command          = _thisCommand !;
                custom.CommandParameter = thisCard;
                GridHelper.AddControlToGrid(thisGrid, custom, 0, 0);
                Grid.SetColumnSpan(custom, 2); // so it spans the entire control.
                _thisStack.Children.Add(thisGrid);
            }
        }
        //public void Dispose()
        //{
        //    _thisStack.Children.Clear();
        //}
        public void Init(bool NeedsPopulating)
        {
            if (ThisPile == null)
            {
                throw new BasicBlankException("Must send in the pile being used for this");
            }
            if (MainMod == null)
            {
                throw new BasicBlankException("There was no main viewmodel sent for this");
            }
            _cardList                    = ThisPile.CardList;
            BindingContext               = ThisPile;
            VerticalOptions              = LayoutOptions.StartAndExpand; // had to actually expand.
            _thisStack.IsKlondike        = MainMod.IsKlondike;           // needed this as well.
            _cardList.CollectionChanged += CardList_CollectionChanged;
            Grid thisGrid = new Grid();

            thisGrid.Children.Add(_thisStack);
            RowClickerXF thisBlank = new RowClickerXF();

            thisBlank.Command           = MainMod.ColumnCommand;
            thisBlank.CommandParameter  = ThisPile; //hopefully this simple (?)
            thisBlank.HorizontalOptions = LayoutOptions.Fill;
            thisBlank.VerticalOptions   = LayoutOptions.Fill;
            thisGrid.Children.Add(thisBlank);
            //another choice is to let the events handle the populating.
            _thisScroll                  = new ScrollView();
            _thisScroll.Orientation      = ScrollOrientation.Vertical;
            _thisScroll.InputTransparent = true;
            _thisScroll.Content          = thisGrid;
            if (NeedsPopulating)
            {
                PopulateList();
            }
            Content = _thisScroll;
            SetBinding(IsSelectedProperty, new Binding(nameof(PileInfoCP.IsSelected)));
        }
        public YahtzeeScoresheetView(ScoreContainer scoreContainer,
                                     IYahtzeeLayout layout,
                                     IStandardScreen screen
                                     )
        {
            _layout = layout;
            _screen = screen;


            Grid grid = new Grid();

            2.Times(x => GridHelper.AddLeftOverColumn(grid, 50));
            grid.RowSpacing = 2;
            CrossPlatformBorderXF thisBorder; //no groupboxes.
            Grid otherGrid = new Grid();

            otherGrid.BackgroundColor = Color.White;
            if (_screen.IsSmallest)
            {
                otherGrid.HorizontalOptions = LayoutOptions.Start;
                otherGrid.VerticalOptions   = LayoutOptions.Start;
            }
            otherGrid.Margin        = new Thickness(4, 4, 4, 4);
            otherGrid.RowSpacing    = 0;
            otherGrid.ColumnSpacing = 0;
            GridHelper.AddControlToGrid(grid, otherGrid, 0, 0); //i think
            GridHelper.AddLeftOverColumn(otherGrid, 20);
            GridHelper.AddLeftOverColumn(otherGrid, 15);
            GridHelper.AddLeftOverColumn(otherGrid, 15);
            int pixelHeight = _layout.GetPixelHeight;

            8.Times(y => GridHelper.AddPixelRow(otherGrid, pixelHeight));
            Label thisLabel;
            var   thisList = (from item in scoreContainer.RowList
                              where item.IsTop == true && item.RowSection == EnumRow.Regular
                              select item).ToCustomBasicList();

            if (thisList.Count != 6)
            {
                throw new BasicBlankException("All yahtzee games must have 6 sections total, not " + thisList.Count);
            }
            int x = 0;

            foreach (var thisRow in thisList)
            {
                x += 1;
                AddBackroundLabel(otherGrid, thisRow, x);
                thisLabel = GetDescriptionText(thisRow.Description);
                thisLabel.InputTransparent = true;
                thisBorder = GetBorder();
                thisBorder.InputTransparent = true;
                GridHelper.AddControlToGrid(otherGrid, thisBorder, x, 0);
                GridHelper.AddControlToGrid(otherGrid, thisLabel, x, 0);
                thisLabel = GetPossibleText(thisRow);
                thisLabel.InputTransparent = true;
                GridHelper.AddControlToGrid(otherGrid, thisLabel, x, 1);
                thisBorder = GetBorder();
                thisBorder.InputTransparent = true;
                GridHelper.AddControlToGrid(otherGrid, thisBorder, x, 1);
                thisLabel = GetScoreText(thisRow);
                thisLabel.InputTransparent = true;
                GridHelper.AddControlToGrid(otherGrid, thisLabel, x, 2);
                thisBorder = GetBorder();
                thisBorder.InputTransparent = true;
                GridHelper.AddControlToGrid(otherGrid, thisBorder, x, 2);
                RowClickerXF tempRow = new RowClickerXF();
                GridHelper.AddControlToGrid(otherGrid, tempRow, x, 0);
                tempRow.BindingContext = thisRow; //i think.
                tempRow.SetName(nameof(IScoresheetAction.RowAsync));
                tempRow.CommandParameter = thisRow;
                //GamePackageViewModelBinder.ManuelElements.Add(tempRow);
                Grid.SetColumnSpan(tempRow, 3);
            }
            RowInfo bonus = (from Items in scoreContainer.RowList
                             where Items.IsTop == true && Items.RowSection == EnumRow.Bonus
                             select Items).Single();

            x        += 1;
            thisLabel = GetDescriptionText(bonus.Description);
            GridHelper.AddControlToGrid(otherGrid, thisLabel, x, 0);
            thisBorder = GetBorder();
            GridHelper.AddControlToGrid(otherGrid, thisBorder, x, 0);
            thisLabel = new Label();
            thisLabel.BackgroundColor = Color.Aqua;
            GridHelper.AddControlToGrid(otherGrid, thisLabel, x, 1);
            thisBorder = GetBorder();
            GridHelper.AddControlToGrid(otherGrid, thisBorder, x, 1);
            thisLabel = GetScoreText(bonus);
            GridHelper.AddControlToGrid(otherGrid, thisLabel, x, 2);
            thisBorder = GetBorder();
            GridHelper.AddControlToGrid(otherGrid, thisBorder, x, 2);
            x        += 1; //total score last
            thisLabel = GetFooterText("Upper Total");
            GridHelper.AddControlToGrid(otherGrid, thisLabel, x, 0);
            Grid.SetColumnSpan(thisLabel, 2);
            thisBorder = GetBorder();
            GridHelper.AddControlToGrid(otherGrid, thisBorder, x, 0);
            Grid.SetColumnSpan(thisBorder, 2);
            RowInfo topTotal = (from Items in scoreContainer.RowList
                                where Items.IsTop == true && Items.RowSection == EnumRow.Totals
                                select Items).Single();

            thisLabel = GetScoreText(topTotal);
            GridHelper.AddControlToGrid(otherGrid, thisLabel, x, 2);
            thisBorder = GetBorder();
            GridHelper.AddControlToGrid(otherGrid, thisBorder, x, 2);
            otherGrid = new Grid();
            GridHelper.AddControlToGrid(grid, otherGrid, 0, 1); //i think
            otherGrid.BackgroundColor = Color.White;
            otherGrid.RowSpacing      = 0;
            otherGrid.ColumnSpacing   = 0;
            otherGrid.Margin          = new Thickness(4, 4, 4, 4);
            if (_screen.IsSmallest)
            {
                otherGrid.HorizontalOptions = LayoutOptions.Start;
                otherGrid.VerticalOptions   = LayoutOptions.Start;
            }
            GridHelper.AddLeftOverColumn(otherGrid, 20);
            GridHelper.AddLeftOverColumn(otherGrid, 15);
            GridHelper.AddLeftOverColumn(otherGrid, 15);
            thisList = (from Items in scoreContainer.RowList
                        where Items.IsTop == false && Items.RowSection == EnumRow.Regular
                        select Items).ToCustomBasicList();
            int maxs = thisList.Count + 1;

            maxs.Times(x => GridHelper.AddPixelRow(otherGrid, pixelHeight));
            x = 0;
            foreach (var thisRow in thisList)
            {
                RowClickerXF tempRow = new RowClickerXF();
                AddBackroundLabel(otherGrid, thisRow, x);
                thisLabel = GetDescriptionText(thisRow.Description);
                thisLabel.InputTransparent = true;
                thisBorder = GetBorder();
                thisBorder.InputTransparent = true;
                GridHelper.AddControlToGrid(otherGrid, thisBorder, x, 0);
                GridHelper.AddControlToGrid(otherGrid, thisLabel, x, 0);
                thisLabel = GetPossibleText(thisRow);
                thisLabel.InputTransparent = true;
                GridHelper.AddControlToGrid(otherGrid, thisLabel, x, 1);
                thisBorder = GetBorder();
                thisBorder.InputTransparent = true;
                GridHelper.AddControlToGrid(otherGrid, thisBorder, x, 1);
                thisLabel = GetScoreText(thisRow);
                thisLabel.InputTransparent = true;
                GridHelper.AddControlToGrid(otherGrid, thisLabel, x, 2);
                thisBorder = GetBorder();
                thisBorder.InputTransparent = true;
                GridHelper.AddControlToGrid(otherGrid, thisBorder, x, 2);
                GridHelper.AddControlToGrid(otherGrid, tempRow, x, 0);
                tempRow.BindingContext = thisRow;
                tempRow.SetName(nameof(IScoresheetAction.RowAsync));
                tempRow.CommandParameter = thisRow;
                //GamePackageViewModelBinder.ManuelElements.Add(tempRow);
                Grid.SetColumnSpan(tempRow, 3);
                x += 1; //risking here.
            }
            RowInfo bottomTotal = (from Items in scoreContainer.RowList
                                   where Items.IsTop == false && Items.RowSection == EnumRow.Totals
                                   select Items).Single();

            thisLabel = GetFooterText("Total Bottom Portion");
            GridHelper.AddControlToGrid(otherGrid, thisLabel, x, 0);
            Grid.SetColumnSpan(thisLabel, 2);
            thisBorder = GetBorder();
            GridHelper.AddControlToGrid(otherGrid, thisBorder, x, 0);
            Grid.SetColumnSpan(thisBorder, 2);
            thisLabel = GetScoreText(bottomTotal);
            GridHelper.AddControlToGrid(otherGrid, thisLabel, x, 2);
            thisBorder = GetBorder();
            GridHelper.AddControlToGrid(otherGrid, thisBorder, x, 2);
            Content = grid;
        }