コード例 #1
0
 public override void ViewDidDisappear(bool animated)
 {
     base.ViewDidDisappear(animated);
     if (mCalendarView != null)
     {
         mCalendarView.Dispose();
         mCalendarView = null;
     }
 }
コード例 #2
0
        public async void UpdateCalendar(bool forceReload = false)
        {
            await System.Threading.Tasks.Task.Delay(300);

            if (mCalendarView != null && forceReload)
            {
                CalendarDayTimelineView.monthEvents.Clear();
                if (ViewModel.Events != null && ViewModel.Events.Count > 0)
                {
                    foreach (var _eventVM in ViewModel.Events)
                    {
                        if (_eventVM.Unavaiability != null)
                        {
                            CalendarDayTimelineView.monthEvents.Add(new CalendarDayEventView(_eventVM.Unavaiability));
                        }
                        else if (_eventVM.Booking != null)
                        {
                            CalendarDayTimelineView.monthEvents.Add(new CalendarDayEventView(_eventVM.Booking));
                        }
                    }
                }

                //HACK : To force the calendar to refresh after adding events
                //mCalendarView.SingleDayView.ShouldRefreshUI = true;
                //mCalendarView.SingleDayView.EventsNeedRefresh = false;
                mCalendarView.SingleDayView.ForceReloadView(true, false);
                return;
            }

            if (mCalendarView == null)
            {
                mCalendarView = new RotatingCalendarView(vCalendar.Frame);
                var rect = mCalendarView.View.Frame;
                rect.Y = 0;
                mCalendarView.View.Frame = new CGRect(0, 30, vCalendar.Frame.Width, vCalendar.Frame.Height + 40);

                mCalendarView.View.BackgroundColor = UIColor.Clear;

                mCalendarView.SingleDayView.dateChanged += (DateTime newDate) =>
                {
                    ViewModel.GetUnavaiabilities(Core.Helpers.DateTimeHelpers.GetFirstDayOfMonthAndYear(newDate.Year, newDate.Month));
                };

                CalendarDayTimelineView.monthEvents.Clear();
                if (ViewModel.Events != null && ViewModel.Events.Count > 0)
                {
                    foreach (var _eventVM in ViewModel.Events)
                    {
                        if (_eventVM.Unavaiability != null)
                        {
                            CalendarDayTimelineView.monthEvents.Add(new CalendarDayEventView(_eventVM.Unavaiability));
                        }
                        else if (_eventVM.Booking != null)
                        {
                            CalendarDayTimelineView.monthEvents.Add(new CalendarDayEventView(_eventVM.Booking));
                        }
                    }
                }

                //HACK : To force the calendar to refresh after adding events
                //mCalendarView.SingleDayView.ShouldRefreshUI = true;
                //mCalendarView.SingleDayView.EventsNeedRefresh = false;
                mCalendarView.SingleDayView.ForceReloadView(true, false);

                mCalendarView.SingleDayView.OnEventClicked += (CalendarDayEventView theEvent) =>
                {
                    Console.WriteLine(theEvent.Title);
                    if (theEvent._Event != null)
                    {
                        var eventVM = ViewModel.Events.FirstOrDefault(x => x.Unavaiability != null && x.Unavaiability.Equals(theEvent._Event));
                        if (eventVM != null)
                        {
                            ViewModel.EventItemClickedCommand.Execute(eventVM);
                        }
                    }
                    else if (theEvent._Booking != null)
                    {
                        var eventVM = ViewModel.Events.FirstOrDefault(x => x.Booking != null && x.Booking.Equals(theEvent._Booking));
                        if (eventVM != null)
                        {
                            ViewModel.EventItemClickedCommand.Execute(eventVM);
                        }
                    }
                };
                mCalendarView.SingleDayView.OnEditEventClicked += (CalendarDayEventView theEvent) =>
                {
                    var eventVM = ViewModel.Events.FirstOrDefault(x => x.Unavaiability != null && x.Unavaiability.Equals(theEvent._Event));
                    if (eventVM != null)
                    {
                        ViewModel.EventItemClickedCommand.Execute(eventVM);
                    }
                };
                mCalendarView.SingleDayView.OnDeleteEventClicked += (CalendarDayEventView theEvent) =>
                {
                    var eventVM = ViewModel.Events.FirstOrDefault(x => x.Unavaiability != null && x.Unavaiability.Equals(theEvent._Event));
                    if (eventVM != null)
                    {
                        ViewModel.DeleteEventCommand.Execute(eventVM);
                    }
                };
            }

            View.AddSubview(mCalendarView.View);
            if (ViewModel.SelectedEvent != null && mCalendarView != null && mCalendarView.SingleDayView != null)
            {
                mCalendarView.SingleDayView.SetDate(new DateTime(ViewModel.SelectedEvent.StartDate.Year, ViewModel.SelectedEvent.StartDate.Month, ViewModel.SelectedEvent.StartDate.Day, 0, 0, 0, 0, DateTimeKind.Local));
            }

            if (ViewModel.SelectedEvent != null && mCalendarView != null && CalendarDayTimelineView.calMonthView != null && CalendarDayTimelineView.calMonthView._monthGridView != null)
            {
                CalendarDayTimelineView.calMonthView._monthGridView.SelectedDate = new DateTime(ViewModel.SelectedEvent.StartDate.Year, ViewModel.SelectedEvent.StartDate.Month, ViewModel.SelectedEvent.StartDate.Day, 0, 0, 0, 0, DateTimeKind.Local);
                CalendarDayTimelineView.calMonthView._monthGridView.BuildGrid();
            }
            ViewModel.SelectedEvent = null;


            //make sure btnAdd is in front
            View.BringSubviewToFront(btnAdd);

            mCalendarView.View.SizeToFit();
            //mCalendarView.View.ClipsToBounds = true;
        }