internal void CloseThisTabItem([NotNull] MetroTabItem tabItem) { if (tabItem == null) { throw new ArgumentNullException(nameof(tabItem)); } if (this.CloseTabCommand != null) { var closeTabCommandParameter = tabItem.CloseTabCommandParameter ?? tabItem; if (this.CloseTabCommand.CanExecute(closeTabCommandParameter)) { this.CloseTabCommand.Execute(closeTabCommandParameter); } } else { // KIDS: don't try this at home // this is not good MVVM habits and I'm only doing it // because I want the demos to be absolutely bitching // the control is allowed to cancel this event if (this.RaiseTabItemClosingEvent(tabItem)) { return; } if (this.ItemsSource == null) { // if the list is hard-coded (i.e. has no ItemsSource) // then we remove the item from the collection this.Items.Remove(tabItem); } else { // if ItemsSource is something we cannot work with, bail out var collection = this.ItemsSource as IList; if (collection == null) { return; } // find the item and kill it (I mean, remove it) var item2Remove = collection.OfType <object>().FirstOrDefault(item => tabItem == item || tabItem.DataContext == item); if (item2Remove != null) { collection.Remove(item2Remove); } } } }
internal bool RaiseTabItemClosingEvent(MetroTabItem closingItem) { var tabItemClosingEvent = this.TabItemClosingEvent; if (tabItemClosingEvent != null) { foreach (TabItemClosingEventHandler subHandler in tabItemClosingEvent.GetInvocationList().OfType <TabItemClosingEventHandler>()) { var args = new TabItemClosingEventArgs(closingItem); subHandler.Invoke(this, args); if (args.Cancel) { return(true); } } } return(false); }
internal TabItemClosingEventArgs(MetroTabItem item) { ClosingTabItem = item; }