public QuarterBoxViewModel(LoggedQuarter quarter, IssueCollection issues, IssueLogger logger, IEnumerable <IssueRowViewModel> issueRows, IssueColors issueColors) { Margin = new Thickness(1, 1, quarter.Quarter == 3 ? 1 : 0, 1); Background = new ProjectedObservableValue <Brush>(() => issueColors.GetColor(issues.FindLoggedIn(quarter))); issues.LoggedQuartersChanged += Background.Refresh; LogCommand = new DelegateCommand(() => { IssueRowViewModel checkedIssueRow = issueRows.SingleOrDefault(i => i.IsColorChecked.Value == true); if (checkedIssueRow != null) { logger.Log(quarter, checkedIssueRow.Issue); } }); RemoveLogCommand = new DelegateCommand(() => logger.RemoveLog(quarter)); }
public IssueRowViewModel(Issue issue, WorkLogCore workLog, CollectionEventAggregator colorClickedAggregator, IssueColors issueColors) { Issue = issue; Name = Issue.Name; TimeText = ProjectedObservableValue <string> .FromObservableValue(issue.TotalLoggedTime, time => time.ToString("h\\:mm")); Color = issueColors.GetColor(Issue); Background = ProjectedObservableValue <Brush> .FromObservableValue(workLog.Logger.RunningIssue, runningIssue => runningIssue == Issue?Brushes.LightGreen : Brushes.White); StartStopButtonText = ProjectedObservableValue <string> .FromObservableValue(workLog.Logger.RunningIssue, runningIssue => runningIssue == Issue? "Stop" : "Start"); StartStopButtonCommand = new DelegateCommand(() => workLog.Logger.StartStop(Issue)); RemoveButtonCommand = new DelegateCommand(() => { if (MessageBox.Show($"Do you want to delete '{Name}' issue and its logged time?", "Remove issue", MessageBoxButton.YesNo) == MessageBoxResult.Yes) { workLog.Issues.Remove(Issue); issueColors.RemoveColor(Issue); } }); ColorClickedCommand = new DelegateCommand(() => ColorClicked?.Invoke(this, EventArgs.Empty)); colorClickedAggregator.ItemChanged += (sender, e) => IsColorChecked.Value = sender == this && IsColorChecked.Value == false; }