private Gameboard ConvertGenericListToGameboard(ObservableCollection <GenericEditorItem> list)
        {
            // Create defining lists for collation later
            List <Residence> residentialList = new List <Residence>();
            List <string>    residentialSets = new List <string>();
            List <Station>   stationsList    = new List <Station>();
            List <Utility>   utilitiesList   = new List <Utility>();
            List <Tax>       taxationIndexes = new List <Tax>();
            List <int>       chanceIndexes   = new List <int>();
            List <int>       cChestIndexes   = new List <int>();

            foreach (GenericEditorItem item in list)
            {
                switch (item.Type)
                {
                case 0:     // Residential
                    if (item.Name == "Protected")
                    {
                        break;
                    }
                    residentialList.Add(new Residence(null)
                    {
                        Position = item.Index,
                        Name     = item.Name,
                        Set      = item.Set,
                        Price    = item.Price,
                        HouseIncrementationPrice = item.HouseIncrementationCost,
                        Hex  = item.PropertyHex,
                        Rent = item.Rent.ToArray()
                    });
                    if (!residentialSets.Contains(item.Set))
                    {
                        residentialSets.Add(item.Set);
                    }
                    break;

                case 1:     // Station
                    stationsList.Add(new Station(null)
                    {
                        Position = item.Index,
                        Name     = item.Name,
                        Set      = item.Set,
                        Price    = item.Price,
                        Hex      = item.PropertyHex,
                    });
                    break;

                case 2:     // Utility
                    utilitiesList.Add(new Utility(null)
                    {
                        Position = item.Index,
                        Name     = item.Name,
                        Set      = item.Set,
                        Price    = item.Price,
                        Hex      = item.PropertyHex,
                    });
                    break;

                case 3:     // Chance tile
                    chanceIndexes.Add(item.Index);
                    break;

                case 4:     // Community chest tile
                    cChestIndexes.Add(item.Index);
                    break;

                case 5:     // Chance tile
                    taxationIndexes.Add(new Tax(null)
                    {
                        Name     = item.Name,
                        Position = item.Index,
                        Cost     = item.Price
                    });
                    break;
                }
            }
            // Now we need to assemble these collections into an output gameboard
            Gameboard outputGameboard = new Gameboard(null);

            // Do the residences
            outputGameboard.Residences = new Dictionary <string, List <Residence> >();
            foreach (string set in residentialSets)
            {
                List <Residence> residencesOfSet = new List <Residence>();
                foreach (Residence res in residentialList)
                {
                    if (res.Set == set)
                    {
                        residencesOfSet.Add(res);
                    }
                }
                outputGameboard.Residences.Add(set, residencesOfSet);
            }
            // Residences done! Onto stations and utilities
            outputGameboard.Stations           = stationsList;
            outputGameboard.StationsRent       = StationRents.ToArray();
            outputGameboard.Utilities          = utilitiesList;
            outputGameboard.UtilityMultipliers = UtilityRents.ToArray();
            // Properties done! Deal with taxation, chance and community chest
            outputGameboard.TaxIndexes    = taxationIndexes;
            outputGameboard.ChanceIndexes = chanceIndexes.ToArray();
            outputGameboard.ChestIndexes  = cChestIndexes.ToArray();
            return(outputGameboard);
        }
        private void _UpdateStationUtilityRentCounts(object sender)
        {
            Console.WriteLine("Refreshing station and utility rent counters");
            int stations = 0; int utilities = 0;

            foreach (GenericEditorItem item in Board)
            {
                if (item.Type == 1)
                {
                    // Station
                    Console.WriteLine("Found a station at index: " + item.Index);
                    stations++;
                }
                else if (item.Type == 2)
                {
                    // Utility
                    Console.WriteLine("Found a utility at index: " + item.Index);
                    utilities++;
                }
            }
            Console.WriteLine("Counted utilities " + utilities + ", and stations " + stations);
            // Change the numbers where needed
            if (stations > StationRents.Count())
            {
                // Need to add an additional integer to StationsRent
                for (int i = StationRents.Count(); i < stations; i++)
                {
                    Console.WriteLine("Adding a station to a list of " + StationRents.Count());
                    StationRents.Add(0);
                }
            }
            else if (stations < StationRents.Count())
            {
                // Need to remove the unnecessary integers from the end!
                ObservableCollection <int> newList = new ObservableCollection <int>();
                for (int i = 0; i < stations; i++)
                {
                    newList.Add(StationRents[i]);
                    Console.WriteLine("Adding stations, index " + i + ": " + StationRents[i]);
                }
                StationRents = newList;
            }
            // Repeat such a process for the utilities
            // Change the numbers where needed
            if (utilities > UtilityRents.Count())
            {
                // Need to add an additional integer to UtilityRent
                for (int i = UtilityRents.Count(); i < utilities; i++)
                {
                    UtilityRents.Add(0);
                }
            }
            else if (utilities < UtilityRents.Count())
            {
                // Need to remove the unnecessary integers from the end!
                ObservableCollection <int> newList = new ObservableCollection <int>();
                for (int i = 0; i < utilities; i++)
                {
                    newList.Add(UtilityRents[i]);
                }
                UtilityRents = newList;
            }
            Console.WriteLine("Two route done");
            // Force visual updates
            OnPropertyChanged("StationRents");
            OnPropertyChanged("UtilityRents");
            Console.WriteLine("Returning");
        }