/// <summary>
        /// Whenever the View is unloaded, we want to cancel any edit operation
        /// that is in progress.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UserControl_Unloaded(object sender, RoutedEventArgs e)
        {
            logger.Debug("UserControl unloading.");

            if (IsInEditMode)
            {
                logger.Debug("IsInEditMode is true during unload. Canceling edit.");

                ((IEditableCollectionView)_departmentClassesView).CancelEdit();
                ClassesDataGrid.CancelEdit();
                IsInEditMode = false;
            }
        }
        /// <summary>
        /// The constructor for the ClassesView. Wires up all the necessary
        /// objects and events needed by this View.
        /// </summary>
        /// <param name="presenter"></param>
        /// <param name="eventAggregator"></param>
        /// <param name="configurationService"></param>
        public ClassesView(ClassesPresenter presenter, IEventAggregator eventAggregator,
                           IConfigurationService configurationService) : this()
        {
            _presenter            = presenter;
            _presenter.View       = this;
            _eventAggregator      = eventAggregator;
            _configurationService = configurationService;

            logger.Debug("Subscribing to ShellRefreshRequestedEvent.");

            ShellRefreshRequestedEvent shellRefreshRequestedEvent = _eventAggregator.GetEvent <ShellRefreshRequestedEvent>();

            shellRefreshRequestedEvent.Subscribe(OnShellRefreshRequested, ThreadOption.UIThread);

            // Hook into the CanExecuteEvent of the DataGrid so that we can look for
            // when user tries to Delete
            ClassesDataGrid.AddHandler(CommandManager.CanExecuteEvent,
                                       new CanExecuteRoutedEventHandler(OnCanExecuteRoutedEventHandler), true);
        }