public HelpDeskViewModel([Import] ScrumFactory.Composition.IEventAggregator aggregator)
        {
            this.aggregator = aggregator;

            aggregator.Subscribe<string>(ScrumFactoryEvent.ConfigChanged, c => {
                if (c == "TicketProjectsEnabled")
                    OnPropertyChanged("PanelPlacement");

            });

            OnLoadCommand = new ScrumFactory.Composition.DelegateCommand(() => { if (NeedRefresh) LoadData(); });

            RefreshCommand = new ScrumFactory.Composition.DelegateCommand(LoadData);

            ShowItemCommand = new ScrumFactory.Composition.DelegateCommand<BacklogItem>(ShowItem);

            AddJobCommand = new ScrumFactory.Composition.DelegateCommand(AddJob);

            delayFilter = new DelayAction(800, new DelayAction.ActionDelegate(() => { ticketsSource.View.Refresh(); }));

            ticketsSource = new System.Windows.Data.CollectionViewSource();
            ticketsSource.Filter += new System.Windows.Data.FilterEventHandler(ticketsSource_Filter);

            NeedRefresh = true;
        }
        public BacklogItemTaskListViewModel([Import] ScrumFactory.Composition.IEventAggregator aggregator)
        {
            this.aggregator = aggregator;

            RefreshCommand = new ScrumFactory.Composition.DelegateCommand(LoadTasks);

            ShowTaskCommand = new ScrumFactory.Composition.DelegateCommand<Task>(ShowTask);

            AddTaskCommand = new ScrumFactory.Composition.DelegateCommand<string>(CanAddTask, s => { AddTask(s == "True"); });
            ConfirmAddTaskCommand = new ScrumFactory.Composition.DelegateCommand(ConfirmAddTask);
            CancelAddTaskCommand = new ScrumFactory.Composition.DelegateCommand(CancelAddTask);

            ShowRepositoryLogCommand = new ScrumFactory.Composition.DelegateCommand<int>(ShowRepositoryLog);

            NeedRefresh = true;
        }