protected ComicNavigationItemGridViewModel( IMainPageContent parent, MainViewModel appViewModel, NavigationTag navigationTag, ComicCollectionSortSelector initialSort ) : base(parent, appViewModel) { // Note: in the future, we may want to store this to remove the event handler switch (navigationTag) { case NavigationTag.Comics: throw new ProgrammerError("Cannot make of navigation item view model for work items"); case NavigationTag.Playlist: this.collections = this.MainViewModel.Playlists; this.collections.SetSort(initialSort); break; default: this.collections = this.MainViewModel.SortedComicCollectionsFor(navigationTag, initialSort); break; } this.collections.CollectionsChanged += this.Collections_CollectionsChanged; }
public static IComparer <IComicCollection> Make(ComicCollectionSortSelector sortSelector) { return(sortSelector switch { ComicCollectionSortSelector.Name => new NameComparer(), ComicCollectionSortSelector.ItemCount => new ItemCountComparer(), ComicCollectionSortSelector.Random => throw new ProgrammerError( $"{nameof(ComicCollectionComparers)}.{nameof(Make)}: Random not allowed here" ), _ => throw new ProgrammerError($"{nameof(ComicCollectionComparers)}.{nameof(Make)}: unexpected sort selector") });
public static ComicNavigationItemGridViewModel ForViewModel( IMainPageContent parent, MainViewModel mainViewModel, NavigationTag navigationTag, ComicCollectionSortSelector initialSort, ComicItemGridState?savedState = null ) { var viewModel = new ComicNavigationItemGridViewModel(parent, mainViewModel, navigationTag, initialSort); if (savedState?.LastModified is { } lastModified&& lastModified == mainViewModel.LastModified) { viewModel.SetComicItems(savedState.Items); }