/// <summary>
        /// Add a trip to the persistent trip store, and saves the trips data file.
        /// </summary>
        /// <param name="trip">The trip to save or update in the data file.</param>
        public async Task SaveTrip(Trip trip)
        {
            if (!Trips.Contains(trip))
            {
                Trips.Add(trip);
            }

            await WriteTrips();
        }
        /// <summary>
        /// Load trips from a file on first-launch of the app. If the file does not yet exist,
        /// pre-seed it with several trips, in order to give the app demonstration data.
        /// </summary>
        public async Task LoadTrips()
        {
            // Ensure that we don't load trip data more than once.
            if (loaded)
            {
                return;
            }
            loaded = true;

            StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;
            this.trips.Clear();

            var item = await folder.TryGetItemAsync("trips.xml");
            if (item == null)
            {
                // Add some 'starter' trips
                trips.Add(
                    new Trip()
                    {
                        Destination = "London",
                        Description = "Trip to London!",
                        StartDate = new DateTime(2015, 5, 5),
                        EndDate = new DateTime(2015, 5, 15)
                    });
                trips.Add(
                    new Trip()
                    {
                        Destination = "Melbourne",
                        Description = "Trip to Australia",
                        StartDate = new DateTime(2016, 2, 2),
                        EndDate = new DateTime(2016, 5, 17),
                        Notes = "Bring Sunscreen!"
                    });
                trips.Add(
                    new Trip()
                    {
                        Destination = "Yosemite National Park",
                        Description = "Trip to Yosemite",
                        StartDate = new DateTime(2015, 7, 11),
                        EndDate = new DateTime(2015, 7, 19),
                        Notes = "Buy some new hiking boots"
                    });
                await WriteTrips();
                return;
            }

            // Load trips out of a simple XML format. For the purposes of this example, we're treating
            // parse failures as "no trips exist" which will result in the file being erased.
            if (item.IsOfType(StorageItemTypes.File))
            {
                StorageFile tripsFile = item as StorageFile;

                string tripXmlText = await FileIO.ReadTextAsync(tripsFile);

                try
                {
                    XElement xmldoc = XElement.Parse(tripXmlText);

                    var tripElements = xmldoc.Descendants("Trip");
                    foreach (var tripElement in tripElements)
                    {
                        Trip trip = new Trip();

                        var destElement = tripElement.Descendants("Destination").FirstOrDefault();
                        if (destElement != null)
                        {
                            trip.Destination = destElement.Value;
                        }

                        var descElement = tripElement.Descendants("Description").FirstOrDefault();
                        if (descElement != null)
                        {
                            trip.Description = descElement.Value;
                        }


                        var startElement = tripElement.Descendants("StartDate").FirstOrDefault();
                        if (startElement != null)
                        {
                            DateTime startDate;
                            if (DateTime.TryParse(startElement.Value, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out startDate))
                            {
                                trip.StartDate = startDate;
                            }
                            else
                            {
                                trip.StartDate = null;
                            }
                        }

                        var endElement = tripElement.Descendants("EndDate").FirstOrDefault();
                        if (endElement != null)
                        {
                            DateTime endDate;
                            if (DateTime.TryParse(endElement.Value, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out endDate))
                            {
                                trip.EndDate = endDate;
                            }
                            else
                            {
                                trip.EndDate = null;
                            }
                        }

                        var notesElement = tripElement.Descendants("Notes").FirstOrDefault();
                        if (notesElement != null)
                        {
                            trip.Notes = notesElement.Value;
                        }

                        Trips.Add(trip);
                    }
                }
                catch (XmlException ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.ToString());
                    return;
                }

            }
        }
 /// <summary>
 /// Sets up the view model to create a new trip.
 /// </summary>
 internal void NewTrip()
 {
     showDelete = false;
     Trip = new Trip();
 }
 /// <summary>
 /// Delete a trip from the persistent trip store, and save the trips file.
 /// </summary>
 /// <param name="trip">The trip to delete. If the trip is not an existing trip in the store,
 /// will not have an effect.</param>
 public async Task DeleteTrip(Trip trip)
 {
     Trips.Remove(trip);
     await WriteTrips();
 }
 /// <summary>
 /// Sets up the view model to show an existing trip.
 /// </summary>
 /// <param name="trip"></param>
 internal void ShowTrip(Trip trip)
 {
     showDelete = true;
     Trip = trip;
 }
 /// <summary>
 /// Construct Trip ViewModel, providing the store to persist trips. 
 /// Creates the RelayCommands to be bound to various buttons in the UI.
 /// </summary>
 /// <param name="store">The persistent store</param>
 public TripViewModel(TripStore store)
 {
     trip = new Trip();
     saveTripCommand = new RelayCommand(new Action(SaveTrip));
     deleteTripCommand = new RelayCommand(new Action(DeleteTrip));
     this.store = store;
 }
        /// <summary>
        /// Load trips from a file on first-launch of the app. If the file does not yet exist,
        /// pre-seed it with several trips, in order to give the app demonstration data.
        /// </summary>
        public async Task LoadTrips()
        {
            StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;
            this.trips.Clear();
            IStorageItem item = null;
            if (Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride != "zh-Hans-CN")
            {
                item = await folder.TryGetItemAsync("trips_en.xml");
                if (item == null)
                {
                    // Add some 'starter' trips
                    trips.Add(
                        new Trip()
                        {
                            Destination = "London",
                            Description = "Trip to London!",
                            StartDate = new DateTime(2015, 5, 5),
                            EndDate = new DateTime(2015, 5, 15)
                        });

                    trips.Add(
                        new Trip()
                        {
                            Destination = "Melbourne",
                            Description = "Trip to Australia",
                            StartDate = new DateTime(2016, 2, 2),
                            EndDate = new DateTime(2016, 5, 17),
                            Notes = "Bring Sunscreen!"
                        });
                    trips.Add(
                        new Trip()
                        {
                            Destination = "Las Vegas",
                            Description = "Trip to Las Vegas",
                            StartDate = new DateTime(2015, 7, 11),
                            EndDate = new DateTime(2015, 7, 19),
                            Notes = "Buy some new hiking boots"
                        });
                    await WriteTrips();
                    return;
                }
            }
            else
            {
                item = await folder.TryGetItemAsync("trips_zh.xml");
                if (item == null)
                {
                    // Add some 'starter' trips
                    trips.Add(
                        new Trip()
                        {
                            Destination = "伦敦",
                            Description = "伦敦之旅!",
                            StartDate = new DateTime(2015, 5, 5),
                            EndDate = new DateTime(2015, 5, 15)
                        });

                    trips.Add(
                        new Trip()
                        {
                            Destination = "墨尔本",
                            Description = "澳大利亚之旅",
                            StartDate = new DateTime(2016, 2, 2),
                            EndDate = new DateTime(2016, 5, 17),
                            Notes = "带防晒霜!"
                        });
                    trips.Add(
                        new Trip()
                        {
                            Destination = "拉斯维加斯",
                            Description = "拉斯维加斯之旅",
                            StartDate = new DateTime(2015, 7, 11),
                            EndDate = new DateTime(2015, 7, 19),
                            Notes = "买一些新的登山靴"
                        });
                    await WriteTrips();
                    return;
                }
            }

            // Load trips out of a simple XML format. For the purposes of this example, we're treating
            // parse failures as "no trips exist" which will result in the file being erased.
            if (item.IsOfType(StorageItemTypes.File))
            {
                StorageFile tripsFile = item as StorageFile;

                string tripXmlText = await FileIO.ReadTextAsync(tripsFile);

                try
                {
                    XElement xmldoc = XElement.Parse(tripXmlText);

                    var tripElements = xmldoc.Descendants("Trip");
                    foreach (var tripElement in tripElements)
                    {
                        Trip trip = new Trip();

                        var destElement = tripElement.Descendants("Destination").FirstOrDefault();
                        if (destElement != null)
                        {
                            trip.Destination = destElement.Value;
                        }

                        var descElement = tripElement.Descendants("Description").FirstOrDefault();
                        if (descElement != null)
                        {
                            trip.Description = descElement.Value;
                        }


                        var startElement = tripElement.Descendants("StartDate").FirstOrDefault();
                        if (startElement != null)
                        {
                            DateTime startDate;
                            if (DateTime.TryParse(startElement.Value, out startDate))
                            {
                                trip.StartDate = startDate;
                            }
                            else
                            {
                                trip.StartDate = null;
                            }
                        }

                        var endElement = tripElement.Descendants("EndDate").FirstOrDefault();
                        if (endElement != null)
                        {
                            DateTime endDate;
                            if (DateTime.TryParse(startElement.Value, out endDate))
                            {
                                trip.EndDate = endDate;
                            }
                            else
                            {
                                trip.EndDate = null;
                            }
                        }

                        var notesElement = tripElement.Descendants("Notes").FirstOrDefault();
                        if (notesElement != null)
                        {
                            trip.Notes = notesElement.Value;
                        }

                        Trips.Add(trip);
                    }
                }
                catch (XmlException ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.ToString());
                    return;
                }
            }
        }
        /// <summary>
        /// Load trips from a file on first-launch of the app. If the file does not yet exist,
        /// pre-seed it with several trips, in order to give the app demonstration data.
        /// </summary>
        public async Task LoadTrips()
        {
            StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;

            this.trips.Clear();

            var item = await folder.TryGetItemAsync("trips.xml");

            if (item == null)
            {
                // Add some 'starter' trips
                trips.Add(
                    new Trip()
                {
                    Destination = "London",
                    Description = "Trip to London!",
                    StartDate   = new DateTime(2015, 5, 5),
                    EndDate     = new DateTime(2015, 5, 15)
                });
                trips.Add(
                    new Trip()
                {
                    Destination = "Melbourne",
                    Description = "Trip to Australia",
                    StartDate   = new DateTime(2016, 2, 2),
                    EndDate     = new DateTime(2016, 5, 17),
                    Notes       = "Bring Sunscreen!"
                });
                trips.Add(
                    new Trip()
                {
                    Destination = "Yosemite National Park",
                    Description = "Trip to Yosemite",
                    StartDate   = new DateTime(2015, 7, 11),
                    EndDate     = new DateTime(2015, 7, 19),
                    Notes       = "Buy some new hiking boots"
                });
                await WriteTrips();

                return;
            }

            // Load trips out of a simple XML format. For the purposes of this example, we're treating
            // parse failures as "no trips exist" which will result in the file being erased.
            if (item.IsOfType(StorageItemTypes.File))
            {
                StorageFile tripsFile = item as StorageFile;

                string tripXmlText = await FileIO.ReadTextAsync(tripsFile);

                try
                {
                    XElement xmldoc = XElement.Parse(tripXmlText);

                    var tripElements = xmldoc.Descendants("Trip");
                    foreach (var tripElement in tripElements)
                    {
                        Trip trip = new Trip();

                        var destElement = tripElement.Descendants("Destination").FirstOrDefault();
                        if (destElement != null)
                        {
                            trip.Destination = destElement.Value;
                        }

                        var descElement = tripElement.Descendants("Description").FirstOrDefault();
                        if (descElement != null)
                        {
                            trip.Description = descElement.Value;
                        }


                        var startElement = tripElement.Descendants("StartDate").FirstOrDefault();
                        if (startElement != null)
                        {
                            DateTime startDate;
                            if (DateTime.TryParse(startElement.Value, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out startDate))
                            {
                                trip.StartDate = startDate;
                            }
                            else
                            {
                                trip.StartDate = null;
                            }
                        }

                        var endElement = tripElement.Descendants("EndDate").FirstOrDefault();
                        if (endElement != null)
                        {
                            DateTime endDate;
                            if (DateTime.TryParse(endElement.Value, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out endDate))
                            {
                                trip.EndDate = endDate;
                            }
                            else
                            {
                                trip.EndDate = null;
                            }
                        }

                        var notesElement = tripElement.Descendants("Notes").FirstOrDefault();
                        if (notesElement != null)
                        {
                            trip.Notes = notesElement.Value;
                        }

                        Trips.Add(trip);
                    }
                }
                catch (XmlException ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.ToString());
                    return;
                }
            }
        }
 /// <summary>
 /// Delete a trip from the persistent trip store, and save the trips file.
 /// </summary>
 /// <param name="trip">The trip to delete. If the trip is not an existing trip in the store,
 /// will not have an effect.</param>
 public async Task DeleteTrip(Trip trip)
 {
     Trips.Remove(trip);
     await WriteTrips();
 }