/// <summary> /// Refreshes entire display. Items in database but not in view will be added, /// while items not in database but in view will be removed. /// </summary> public void Refresh() { if (_isRefreshing) { return; } _isRefreshing = true; Appointment[] appts = AppointmentDatabase.GetAppointments(Date); List <Appointment> addArray = new List <Appointment>(); bool clockGridNeedsLayout = false; if (appts != null) { foreach (Appointment each in appts) { bool contains = false; if (each.AllDay) { foreach (DayDetail detail in stackPanel.Children) { if (detail.Appointment.ID == each.ID) { detail.Appointment = each; detail.InitializeDisplay(); contains = true; break; } } } else { foreach (DayDetail detail in clockGrid.Items) { if (detail.Appointment.ID == each.ID) { detail.Appointment = each; detail.InitializeDisplay(); clockGridNeedsLayout = true; contains = true; break; } } } if (!contains) { addArray.Add(each); } } } List <DayDetail> deleteArray = new List <DayDetail>(); foreach (DayDetail detail in stackPanel.Children) { if (!AppointmentInArray(appts, detail.Appointment.ID) && _activeDetail != detail) { deleteArray.Add(detail); } } foreach (DayDetail detail in clockGrid.Items) { if (!AppointmentInArray(appts, detail.Appointment.ID) && _activeDetail != detail) { deleteArray.Add(detail); } } foreach (DayDetail detail in deleteArray) { detail.AnimatedDelete(false); } if (addArray.Count > 0) { foreach (Appointment each in addArray) { DayDetail detail = new DayDetail(each); AddHandlers(detail); if (each.AllDay) { stackPanel.Children.Add(detail); } else { clockGrid.AddItem(detail); clockGridNeedsLayout = false; } } } if (clockGridNeedsLayout) { clockGrid.Layout(); } _isRefreshing = false; }