public MainViewerViewModel(MainViewer viewer) { // Add starting area to the list of favorites Favorites = new ObservableCollection <AreaViewModel>(); var startingAreaVm = new AreaViewModel(StartingArea.Clone(), this); Favorites.Add(startingAreaVm); startingAreaVm.NotifyAllPropertiesChanged(); // Create remaining parts of view model AddToFavoritesCommand = new AddToFavoritesCommand(this); UpdateFavoriteCommand = new UpdateFavoriteCommand(this); RerenderImageCommand = new RerenderImageCommand(this); SaveFavoritesCommand = new SaveFavoritesCommand(this); // EVIP: ICommand which needs an Action<> to be set, so it can use it during its execution. // Note: We need to provide the method to add an Area to the favorites list. // Example for providing an action (to invoke for all loaded elements) as a constructor parameter // of type Action<Area>. AddFavoritesFromFileCommand = new AddFavoritesFromFileCommand(this, AddToFavoritesCommand.Add); // EVIP: Cloning to avoid manipulation of // the same instance from many points. CurrentArea = StartingArea.Clone(); // Note: After cloning, we need to subscribe to the event of the new instance. CurrentArea.PropertyChanged += CurrentArea_PropertyChanged; }
protected override async void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); if (e.Parameter != null) { string arg = e.Parameter.ToString(); switch (arg) { case "view-alerts": GotoAlertsPage(); break; default: break; } } LocationData LocParameter = e.Parameter as LocationData; if (e.NavigationMode == NavigationMode.New) { // Reset loader if new page instance created location = null; wLoader = null; MainViewer.ChangeView(null, 0, null); // New page instance created, so restore if (LocParameter != null) { location = LocParameter; wLoader = new WeatherDataLoader(location, this, this); } await Restore(); } else { LocationData homeData = Settings.HomeData; // Did home change? bool homeChanged = false; if (location != null && Frame.BackStack.Count == 0) { if (!location.Equals(homeData)) { location = homeData; homeChanged = true; } } if (wLoader != null) { var userlang = GlobalizationPreferences.Languages.First(); var culture = new CultureInfo(userlang); var locale = wm.LocaleToLangCode(culture.TwoLetterISOLanguageName, culture.Name); // Reset loader if source, query or locale is different bool resetLoader = WeatherView.WeatherSource != Settings.API || homeChanged; if (wm.SupportsWeatherLocale && !resetLoader) { resetLoader = WeatherView.WeatherLocale != locale; } if (resetLoader) { wLoader = null; } } // Update view on resume // ex. If temperature unit changed if ((wLoader != null) && !homeChanged) { await Resume(); if (location.query == homeData.query) { // Clear backstack since we're home Frame.BackStack.Clear(); SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed; } } else { await Restore(); } } }
public SettingsForm(MainViewer parent) { InitializeComponent(); AlertCheckBox.Checked = Settings.EndBeginAlerts; this.parent = parent; }