...
Here are some useful extension methods
ITabServiceExtensions
Code Block |
---|
namespace TabDemo.Services { using Catel; using Catel.IoC; using Catel.MVVM; using Services; public static class ITabServiceExtensions { public static TabItem Add<TViewModel>(this ITabService tabService, object dataContext = null, bool canClose = false) where TViewModel : IViewModel { Argument.IsNotNull(() => tabService); var tabItem = CreateTabItem<TViewModel>(tabService, dataContext); tabItem.CanClose = canClose; tabService.Add(tabItem); return tabItem; } public static TabItem AddAndActivate<TViewModel>(this ITabService tabService, object dataContext = null, bool canClose = false) where TViewModel : IViewModel { Argument.IsNotNull(() => tabService); var tabItem = Add<TViewModel>(tabService, dataContext, canClose); tabService.Activate(tabItem); return tabItem; } public static TabItem CreateTabItem<TViewModel>(this ITabService tabService, object dataContext) where TViewModel : IViewModel { Argument.IsNotNull(() => tabService); var dependencyResolver = tabService.GetDependencyResolver(); var viewModelFactory = dependencyResolver.Resolve<IViewModelFactory>(); var vm = viewModelFactory.CreateViewModel<TViewModel>(dataContext); return new TabItem(vm); } public static void AddAndActivate(this ITabService tabService, TabItem tabItem) { Argument.IsNotNull(() => tabService); Argument.IsNotNull(() => tabItem); tabService.Add(tabItem); tabService.Activate(tabItem); } } } |
TabControlExtensions
Code Block |
---|
namespace TabDemo.Services { using System.Linq; using System.Windows.Controls; public static class TabControlExtensions { public static bool RemoveAndUpdateSelection(this TabControl tabControl, object tabItem) { var index = tabControl.Items.IndexOf(tabItem); if (index == -1) { return false; } var wasSelected = ReferenceEquals(tabControl.SelectedItem, tabItem); tabControl.Items.RemoveAt(index); if (wasSelected) { var newIndex = index; var newItem = newIndex < tabControl.Items.Count ? tabControl.Items[newIndex] : tabControl.Items.Cast<object>().LastOrDefault(x => x is TabItem); tabControl.SelectedItem = newItem; } return true; } } } |
...