public void SprintViewModel_Dispose_Ok()
        {
            // creates a Item ViewModel
            IEventAggregator aggregator = new ScrumFactory.Composition.EventAggregator();
            ViewModel.SprintViewModel viewModel = new ViewModel.SprintViewModel(
                null,
                null,
                aggregator,
                new Sprint(),
                null, null, null);

            // creates the view
            FakeView view = new FakeView();
            view.Model = viewModel;

            // clears VM reference
            WeakReference sprintVMRef = new WeakReference(viewModel);
            viewModel.Dispose();
            viewModel = null;
            view.Model = null;

            GC.Collect();
            GC.WaitForPendingFinalizers();

            Assert.IsNull(sprintVMRef.Target, "ViewModel was not garbage collected. Check OnDispose method to see if all Commands and Events were unsubscribed");
        }
        private void AfterAddSprint(Sprint newSprint, ICollection<BacklogItem> defaultItems)
        {
            Backlog.GroupList.LoadGroupsIfNotLoaded();

            Project.Sprints.Add(newSprint);

            ViewModel.SprintViewModel sprintVM = new ViewModel.SprintViewModel(
                projectsService,
                executor,
                aggregator,
                newSprint,
                Items,
                SFConfig,
                calendar);

            if (defaultItems != null) {
                foreach (BacklogItem item in defaultItems) {
                    BacklogItemViewModel vm = new BacklogItemViewModel(backlogService, executor, aggregator, authorizator, Project, item, SFConfig);

                    Items.Add(vm);
                    vm.NotifyAdded();
                }
            }

            SprintPlans.Add(sprintVM);
            sprintVM.RefreshUI();
            sprintVM.NotifyAdded();

            aggregator.Publish<Sprint>(ScrumFactoryEvent.SprintAdded, newSprint);

            IsLoadingData = false;
        }