We need to get from Florence to St. Moritz, Switzerland on July 21 and I'm having trouble figuring out the best way to get there (which route, which train company) and whether we should buy train tickets in advance. Any suggestions would be appreciated.
You don't have a whole lot of choice in train companies. Maybe between Trenitalia and Italotreno to Milano Centrale. But Trenitalia will sell you a ticket all the way to Tirano. Then it is SBB (actually Rhaetischebahn) to St Mortiz.
Yes take the train Florence to Milan to Lugano and catch the bus that goes directy there.
The bus from Lugano to St Moritz only goes once a day. if you look at routes at www. bahn.com, they suggest the fastest way is to take the train to Colico, then a bus to St Moritz. I'd suggest taking a bit longer by specifying a stopover in Tirano and taking the hourly Rhaetischebahn train to San Moritz.
Now the problem at this instant is that the train from Milano Centrale to Colico and Tirano are Italian Regionale trains, and thus they will not be loaded in the schedule until we get closer to the semi annual schedule change on June 10. But Regionale trains are always the same price, do not take reservations, so just check the schedule on June 4. You can book a Freccia train now to Milano Centrale for July 23, and be assured that there will be little or no difference in the schedule. You can buy tickets when you get to Milano Centrale, or on-line after June 10.