private void CloseTab(TabViewModel tabViewModel) { tabViewModel.HandleTabClosing(); switch (tabViewModel) { case SearchTabViewModel searchTabViewModel: searchTabViewModel.NonFictionSearchComplete -= SearchTabNonFictionSearchComplete; searchTabViewModel.FictionSearchComplete -= SearchTabFictionSearchComplete; searchTabViewModel.SciMagSearchComplete -= SearchTabSciMagSearchComplete; break; case NonFictionSearchResultsTabViewModel nonFictionSearchResultsTabViewModel: nonFictionSearchResultsTabViewModel.OpenNonFictionDetailsRequested -= OpenNonFictionDetailsRequested; break; case FictionSearchResultsTabViewModel fictionSearchResultsTabViewModel: fictionSearchResultsTabViewModel.OpenFictionDetailsRequested -= OpenFictionDetailsRequested; break; case SciMagSearchResultsTabViewModel sciMagSearchResultsTabViewModel: sciMagSearchResultsTabViewModel.OpenSciMagDetailsRequested -= OpenSciMagDetailsRequested; break; case NonFictionDetailsTabViewModel nonFictionDetailsTabViewModel: nonFictionDetailsTabViewModel.SelectDownloadRequested -= SelectDownloadRequested; nonFictionDetailsTabViewModel.CloseTabRequested -= NonFictionDetailsCloseTabRequested; break; case FictionDetailsTabViewModel fictionDetailsTabViewModel: fictionDetailsTabViewModel.SelectDownloadRequested -= SelectDownloadRequested; fictionDetailsTabViewModel.CloseTabRequested -= FictionDetailsCloseTabRequested; break; case SciMagDetailsTabViewModel sciMagDetailsTabViewModel: sciMagDetailsTabViewModel.SelectDownloadRequested -= SelectDownloadRequested; sciMagDetailsTabViewModel.CloseTabRequested -= SciMagDetailsCloseTabRequested; break; } int removingTabIndex = TabViewModels.IndexOf(tabViewModel); TabViewModels.Remove(tabViewModel); NotifyPropertyChanged(nameof(IsDefaultSearchTabVisible)); NotifyPropertyChanged(nameof(AreTabsVisible)); NotifyPropertyChanged(nameof(IsNewTabButtonVisible)); if (!TabViewModels.Any()) { SelectedTabViewModel = null; DefaultSearchTabViewModel.Refresh(setFocus: true); } else { int newSelectedTabIndex = TabViewModels.Count > removingTabIndex ? removingTabIndex : TabViewModels.Count - 1; SelectedTabViewModel = TabViewModels[newSelectedTabIndex]; } }
public MainWindowViewModel(MainWindowModel model) { this.model = model; NewTootBoxViewModel = new NewTootBoxViewModel(this.model.InReplyTo, this.model.Client); TabViewModels = this.model.Tabs.ToReadOnlyReactiveCollection(p => TabContentViewModelBase.FromParam(p, this.model.InReplyTo, this.model.Tabs, this.model.Client)); SelectedTabIndex = this.model.Tabs.SelectedIndex; OpenSettingsCommand = new ReactiveCommand() .WithSubscribe(() => { var w = new SettingsWindow(new SettingsViewModel(this.model.Tabs)); ((SettingsViewModel)w.DataContext).Tabs = this.model.Tabs; w.ShowDialog(); }); CloseTabCommand = new ReactiveCommand <TabContentViewModelBase>() .WithSubscribe(vm => { this.model.Tabs.CloseTab(TabViewModels.IndexOf(vm)); }); NextTabCommand = new ReactiveCommand() .WithSubscribe(this.model.Tabs.SwitchToNextTab); PrevTabCommand = new ReactiveCommand() .WithSubscribe(this.model.Tabs.SwitchToPrevTab); }