public override void ViewDidDisappear(bool animated) { base.ViewDidDisappear(animated); if (mCalendarView != null) { mCalendarView.Dispose(); mCalendarView = null; } }
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; }