public ToppingsPageModel(Pizza currentPizza)
        {
            ThisPizza = currentPizza;
            string pizzaName = ThisPizza.ItemName;

            BaseSelections = new string[]
            {
                "Pesto Base", "White Base", "Regular Base"
            };
            CookSelections = new string[]
            {
                "Crispy Cook", "Kid Cook", "Light Cook", "Regular Cook"
            };

            var toppingsList = Toppings.AllToppings;

            ToppingSelectionsList = new ObservableCollection <ToppingSelection>();
            for (int i = 0; i < toppingsList.Count; i++)
            {
                var toppingSelection = new ToppingSelection(this);
                toppingSelection.ListTopping                = toppingsList[i];
                toppingSelection.SelectionIndex             = i;
                toppingSelection.SelectionColor             = Xamarin.Forms.Color.Black;
                toppingSelection.WButtonTextColor           = Color.White;
                toppingSelection.AreWholeHalfColumnsVisible = true;
                if (toppingsList[i].ToppingName == ToppingName.HalfMajor)
                {
                    toppingSelection.WButtonTextColor = Color.Black;
                }
                ToppingSelectionsList.Add(toppingSelection);

                //If the pizza type is a slice, don't display whole/halfa/halfb options.

                toppingSelection.AreWholeHalfColumnsVisible = true;
                if (pizzaName.Equals(DisplayNames.GetPizzaDisplayName(PizzaType.ThinSlice)) ||
                    pizzaName.Equals(DisplayNames.GetPizzaDisplayName(PizzaType.PanSlice)))
                {
                    toppingSelection.AreWholeHalfColumnsVisible = false;
                }
            }

            if (ThisPizza != null)
            {
                if (ThisPizza.MajorMamaInfo == MajorOrMama.Major)
                {
                    SelectMajorToppings();
                    ThisPizza.Toppings.AddMajorToppings();
                }
            }
        }
        //For selection or deselection of the Half Major topping.
        private void ProcessHalfMajorToppingSelection(ToppingSelection halfMajorSelection)
        {
            if (
                halfMajorSelection.ListItemIsSelected)   //If selected, toggle to unselect...
            {
                ToppingsPageModel.ThisPizza.Toppings.RemoveToppings(new List <ToppingName>
                {
                    ToppingName.Mushrooms,
                    ToppingName.BlackOlives,
                    ToppingName.GreenPeppers,
                    ToppingName.Onion,
                    ToppingName.Pepperoni,
                    ToppingName.Sausage
                });

                foreach (var toppingSelection in ToppingsPageModel.ToppingSelectionsList)
                {
                    if (toppingSelection.ListTopping.ToppingName == ToppingName.Mushrooms ||
                        toppingSelection.ListTopping.ToppingName == ToppingName.GreenPeppers ||
                        toppingSelection.ListTopping.ToppingName == ToppingName.Onion ||
                        toppingSelection.ListTopping.ToppingName == ToppingName.Pepperoni ||
                        toppingSelection.ListTopping.ToppingName == ToppingName.Sausage ||
                        toppingSelection.ListTopping.ToppingName == ToppingName.BlackOlives)
                    {
                        toppingSelection.ButtonWSelected = false;
                        toppingSelection.ButtonASelected = false;
                        toppingSelection.ButtonBSelected = false;
                        toppingSelection.SelectionColor  = Xamarin.Forms.Color.Black;
                    }
                }
                halfMajorSelection.SelectionColor  = Xamarin.Forms.Color.Black;
                halfMajorSelection.ButtonWSelected = false;
                halfMajorSelection.ButtonASelected = false;
                halfMajorSelection.ButtonBSelected = false;
            }
            else
            {
                ToppingsPageModel.SelectMajorToppings(halfMajorSelection.ListTopping.ToppingWholeHalf);
                ToppingsPageModel.ThisPizza.Toppings.AddMajorToppingsToHalf(ToppingWholeHalf.HalfA);

                halfMajorSelection.SelectionColor  = Xamarin.Forms.Color.CornflowerBlue;
                halfMajorSelection.ButtonASelected = true;
                //halfMajorSelection.AColor = Xamarin.Forms.Color.CornflowerBlue;
            }
            halfMajorSelection.ListItemIsSelected = !halfMajorSelection.ListItemIsSelected;
        }
        private void ProcessHalfMajorSelectionOfSide(ToppingSelection thisItemSelected)
        {
            if (thisItemSelected.ListTopping.ToppingWholeHalf == ToppingWholeHalf.Whole)
            {
                thisItemSelected.ButtonWSelected  = false;
                thisItemSelected.ButtonASelected  = false;
                thisItemSelected.ButtonBSelected  = false;
                thisItemSelected.WButtonTextColor = Color.Black;
                return;
            }
            if (!thisItemSelected.ListItemIsSelected)
            {
                thisItemSelected.ListItemIsSelected = true;
                thisItemSelected.SelectionColor     = Color.CornflowerBlue;
                ChangeButtonSelection(thisItemSelected, thisItemSelected.ListTopping.ToppingWholeHalf);
            }

            thisPizza.Toppings.AddMajorToppings();
            switch (thisItemSelected.ListTopping.ToppingWholeHalf)
            {
            case ToppingWholeHalf.HalfA:
                thisPizza.Toppings.ChangeMajorToppingsHalf(ToppingWholeHalf.HalfA);

                break;

            case ToppingWholeHalf.HalfB:
                thisPizza.Toppings.ChangeMajorToppingsHalf(ToppingWholeHalf.HalfB);
                break;
            }
            ChangeButtonSelection(thisItemSelected, thisItemSelected.ListTopping.ToppingWholeHalf);
            //find all major toppings in ToppingSelectionsList and call ChangeButtonSelection on them.
            foreach (var toppingSelection in ToppingSelectionsList)
            {
                if (toppingSelection.ListTopping.ToppingName == ToppingName.Mushrooms ||
                    toppingSelection.ListTopping.ToppingName == ToppingName.GreenPeppers ||
                    toppingSelection.ListTopping.ToppingName == ToppingName.Onion ||
                    toppingSelection.ListTopping.ToppingName == ToppingName.Pepperoni ||
                    toppingSelection.ListTopping.ToppingName == ToppingName.Sausage ||
                    toppingSelection.ListTopping.ToppingName == ToppingName.BlackOlives)
                {
                    toppingSelection.SelectionColor = Color.CornflowerBlue;
                    ChangeButtonSelection(toppingSelection, thisItemSelected.ListTopping.ToppingWholeHalf);
                }
            }
        }
        private void ListItemTapped(object sender, ItemTappedEventArgs e)
        {
            ToppingSelection selectedItem = e.Item as ToppingSelection;
            int indexOfItemSelected       = selectedItem.SelectionIndex;

            //Can't change ListView directly - must change underlying data.  Get this data by the index.
            ToppingSelection thisSelection = ToppingsPageModel.ToppingSelectionsList[indexOfItemSelected];

            if (thisSelection.ListTopping.ToppingName == ToppingName.HalfMajor)
            {
                ProcessHalfMajorToppingSelection(thisSelection);
            }
            else
            {
                if (thisSelection.ListItemIsSelected)   //If selected, toggle to unselect...
                {
                    thisSelection.ListTopping.SequenceSelected = 0;
                    ToppingsPageModel.ThisPizza.Toppings.RemoveTopping(thisSelection.ListTopping.ToppingName);
                }
                else
                {
                    thisSelection.ListTopping.SequenceSelected = ToppingsPageModel.ThisPizza.Toppings.CurrentToppings.Count + 1;
                    ToppingsPageModel.ThisPizza.Toppings.AddTopping(thisSelection.ListTopping);
                }
                thisSelection.ListItemIsSelected = !thisSelection.ListItemIsSelected;
                //Appearance...
                if (thisSelection.ListItemIsSelected)
                {
                    thisSelection.SelectionColor  = Xamarin.Forms.Color.CornflowerBlue;
                    thisSelection.ButtonWSelected = true;
                }
                else
                {
                    thisSelection.SelectionColor  = Xamarin.Forms.Color.Black;
                    thisSelection.ButtonASelected = false;
                    thisSelection.ButtonBSelected = false;
                    thisSelection.ButtonWSelected = false;
                }
            }

            //NOTE:  Modifying ToppingsPageModel.Toppings directly instead of
            //explicitly setting it here does not trigger bindings.
            //ThisPizza.Toppings = Toppings;
        }
        public void ChangeButtonSelection(ToppingSelection thisItemSelected, ToppingWholeHalf wholeOrHalf)
        {
            switch (wholeOrHalf)
            {
            case ToppingWholeHalf.Whole:
                thisItemSelected.ButtonWSelected = true;
                thisItemSelected.ButtonASelected = false;
                thisItemSelected.ButtonBSelected = false;
                break;

            case ToppingWholeHalf.HalfA:
                thisItemSelected.ButtonASelected = true;
                thisItemSelected.ButtonBSelected = false;
                thisItemSelected.ButtonWSelected = false;
                break;

            case ToppingWholeHalf.HalfB:
                thisItemSelected.ButtonBSelected = true;
                thisItemSelected.ButtonASelected = false;
                thisItemSelected.ButtonWSelected = false;
                break;
            }
        }