private async void Button_Click(object sender, RoutedEventArgs e) { Dispatcher thredDispatcher = Dispatcher.CurrentDispatcher; Action <string> setUpdateMessage = (message) => { thredDispatcher.BeginInvoke( (Action <string>) delegate(string s) { StatusMessage = s; //totally keeping to the pattern here this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("StatusMessage")); }, new object[] { message }); }; SpotifyControllerAPI.Web.Authentication.Authenticator authenticator = SpotifyControllerAPI.Web.Authentication.Authenticator.GetInstance(); if (await authenticator.StartAuthenticatedContext(setUpdateMessage)) { LoggedInWindow window = new LoggedInWindow(authenticator); window.Show(); this.Close(); ViewModelLoggedIn vm = new ViewModelLoggedIn(); window.DataContext = vm; //vm.SelectedTabItem = vm.TabItems.First(x => x.Name == "start"); } }
private void CommandBindingViewItem_Executed(object sender, System.Windows.Input.ExecutedRoutedEventArgs e) { SpotifyBaseObject baseObject = null; if (e.OriginalSource is FrameworkElement fe) { if (fe.DataContext is SpotifyBaseObject sbo) { baseObject = sbo; } else if (fe.DataContext is AggregationSearchTrackItem agri) { baseObject = agri.Track; } ViewModelLoggedIn vm = this.DataContext as ViewModelLoggedIn; /* unfortunately, the generic method doesnt recognize the derived type of the SpotifyBaseObject. * This turns in to a problem if the user tries to reload the view tab (because all derived properties will not be return from DataLoader.GetItemByHref<T>()). * Because of that every type has to be handled explicit*/ switch (baseObject) { case null: break; case Playlist playlist: vm.ViewSpotifyBaseObject(playlist); break; case Album album: vm.ViewSpotifyBaseObject(album); break; case User user: vm.ViewSpotifyBaseObject(user); break; case Artist artist: vm.ViewSpotifyBaseObject(artist); break; /* not sure yet whether to implement a view for track or not */ //case Track track: // vm.ViewSpotifyBaseObject(track); // break; default: throw new Exception($"A object with the type {baseObject.GetType().ToString()} cannot be displayed"); } } }