private void OnModelChanged() { DateTime startDate; DateTime endDate; switch (this.Model.Grouping) { case Grouping.Day: startDate = this.Model.StartDate; endDate = this.Model.EndDate; break; case Grouping.Week: startDate = this.Model.StartDate.ToStartOfWeek(); endDate = this.Model.EndDate.ToEndOfWeek(); break; case Grouping.Month: startDate = this.Model.StartDate.ToStartOfMonth(); endDate = this.Model.EndDate.ToEndOfMonth(); break; case Grouping.Year: startDate = this.Model.StartDate.ToStartOfYear(); endDate = this.Model.EndDate.ToEndOfYear(); break; default: throw new NotImplementedException(); } var itemsSource = new List<HourByGroupData>(); var currentDate = startDate; while (currentDate.Date <= endDate) { var data = new HourByGroupData(); data.Start = currentDate; switch (this.Model.Grouping) { case Grouping.Day: data.Name = currentDate.Date.ToString("M/d"); data.End = currentDate.Date; currentDate = currentDate.Date.AddDays(1); break; case Grouping.Week: data.Name = currentDate.Date.ToString("M/d"); data.End = currentDate.ToEndOfWeek(); currentDate = currentDate.ToStartOfNextWeek(); break; case Grouping.Month: data.Name = currentDate.Date.ToString("M/yyyy"); data.End = currentDate.ToEndOfWeek(); currentDate = currentDate.ToStartOfNextMonth(); break; case Grouping.Year: data.Name = currentDate.Date.ToString("yyyy"); data.End = currentDate.ToEndOfYear(); currentDate = currentDate.ToStartOfNextYear(); break; default: break; } data.Quantity = this.Model.FilteredHours .Where(row => row.Date >= data.Start && row.Date <= data.End) .Sum(row => row.Duration); itemsSource.Add(data); } this.Chart.Series.Clear(); LineSeries series; series = new LineSeries(); series.Title = "Hours"; series.DependentValuePath = "Quantity"; series.IndependentValuePath = "Name"; series.ItemsSource = itemsSource; series.DataPointStyle = (Style)Application.Current.Resources["LineDataPointStyle"]; this.Chart.Title = string.Format("Hours ({0:N0})", itemsSource.Sum(row => row.Quantity)); this.Chart.Series.Add(series); }
private void OnModelChanged() { DateTime startDate; DateTime endDate; switch (this.Model.Grouping) { case Grouping.Week: startDate = this.Model.StartDate.ToStartOfWeek(); endDate = this.Model.EndDate.ToEndOfWeek(); break; case Grouping.Month: startDate = this.Model.StartDate.ToStartOfMonth(); endDate = this.Model.EndDate.ToEndOfMonth(); break; case Grouping.Year: startDate = this.Model.StartDate.ToStartOfYear(); endDate = this.Model.EndDate.ToEndOfYear(); break; default: throw new NotImplementedException(); } var itemsSource = new List<HourByGroupData>(); var currentDate = startDate; while (currentDate.Date <= endDate) { var data = new HourByGroupData(); data.Start = currentDate; switch (this.Model.Grouping) { case Grouping.Week: data.Name = currentDate.Date.ToString("M/d"); data.End = currentDate.ToEndOfWeek(); currentDate = currentDate.ToStartOfNextWeek(); break; case Grouping.Month: data.Name = currentDate.Date.ToString("M/yyyy"); data.End = currentDate.ToEndOfWeek(); currentDate = currentDate.ToStartOfNextMonth(); break; case Grouping.Year: data.Name = currentDate.Date.ToString("yyyy"); data.End = currentDate.ToEndOfYear(); currentDate = currentDate.ToStartOfNextYear(); break; default: break; } data.Quantity = this.Model.FilteredHours .Where(row => row.Date >= data.Start && row.Date <= data.End) .Sum(row => row.Duration); itemsSource.Add(data); } this.DataGrid.ItemsSource = itemsSource; }