Exemplo n.º 1
0
        /// <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;
        }