public override void OnViewModelLoadedOverride()
        {
            ViewModel.PropertyChanged += new WeakEventHandler <PropertyChangedEventArgs>(ViewModel_PropertyChanged).Handler;

            _calendarView         = FindViewById <MyCalendarView>(Resource.Id.CalendarView);
            _calendarView.Adapter = new MyCalendarAdapter(ViewModel, ViewModel.DisplayMonth, ViewModel.FirstDayOfWeek);
            _calendarView_DisplayMonthChanged(_calendarView, new EventArgs());
            _calendarView.DisplayMonthChanged += _calendarView_DisplayMonthChanged;
            _calendarView.SelectedDateChanged += _calendarView_SelectedDateChanged;
            _calendarView.SelectedDate         = ViewModel.SelectedDate;

            var addItemControl = FindViewById <FloatingAddItemControl>(Resource.Id.FloatingAddItemControl);

            addItemControl.SupportsAddHoliday    = true;
            addItemControl.OnRequestAddExam     += AddItemControl_OnRequestAddExam;
            addItemControl.OnRequestAddHomework += AddItemControl_OnRequestAddHomework;
            addItemControl.OnRequestAddHoliday  += AddItemControl_OnRequestAddHoliday;

            _dayPagerControl = FindViewById <DayPagerControl>(Resource.Id.DayPagerControl);
            _dayPagerControl.Initialize(ViewModel.SemesterItemsViewGroup, ViewModel.SelectedDate);
            _dayPagerControl.ItemClick          += _dayPagerControl_ItemClick;
            _dayPagerControl.HolidayItemClick   += _dayPagerControl_HolidayItemClick;
            _dayPagerControl.ScheduleItemClick  += _dayPagerControl_ScheduleItemClick;
            _dayPagerControl.ScheduleClick      += _dayPagerControl_ScheduleClick;
            _dayPagerControl.CurrentDateChanged += _dayPagerControl_CurrentDateChanged;
        }
            public MySmallCalendarMonthView(ViewGroup parent, MyCalendarView calendarView, CalendarViewModel viewModel, DayOfWeek firstDayOfWeek) : base(parent, calendarView, firstDayOfWeek)
            {
                _viewModel = viewModel;

                // Now that we've set the view model, call the actual Initialize, which will then call CreateDay (which depends on the view model being set)
                base.Initialize();
            }
 public MyDataProvider(SemesterItemsViewGroup semesterItems, MyCalendarView calendarView)
 {
     _calendarView  = calendarView;
     _semesterItems = semesterItems;
     _holidays      = semesterItems.Items.Sublist(i => i is ViewItemHoliday);
     _holidays.CollectionChanged += new WeakEventHandler <NotifyCollectionChangedEventArgs>(_holidays_CollectionChanged).Handler;
 }
            public AdaptiveView(MyCalendarView calendarView, UIPagedDayView dayView, CalendarViewModel viewModel)
            {
                _calendarView = calendarView;
                _dayView      = dayView;
                _viewModel    = viewModel;

                _viewModel.PropertyChanged += new WeakEventHandler <PropertyChangedEventArgs>(ViewModel_PropertyChanged).Handler;

                Add(calendarView);
                Add(dayView);
            }
        public override void OnViewModelLoadedOverride()
        {
            UpdateTitle();

            // Calendar
            _cal = new MyCalendarView(ViewModel.FirstDayOfWeek)
            {
                DisplayMonth = ViewModel.DisplayMonth,
                SelectedDate = ViewModel.SelectedDate
            };
            _cal.SetSemester(ViewModel.SemesterItemsViewGroup.Semester);
            _cal.Provider             = new MyDataProvider(ViewModel.SemesterItemsViewGroup, _cal);
            _cal.DateClicked         += new WeakEventHandler <DateTime>(Cal_DateClicked).Handler;
            _cal.DisplayMonthChanged += new WeakEventHandler <DateTime>(Cal_DisplayMonthChanged).Handler;

            // Day pager
            _pagedDayView = new UIPagedDayView(ViewModel.SemesterItemsViewGroup, ViewModel)
            {
                Date = ViewModel.SelectedDate
            };
            _pagedDayView.OnRequestViewClass += new WeakEventHandler <ViewItemClass>(PagedDayView_OnRequestViewClass).Handler;
            _pagedDayView.DateChanged        += new WeakEventHandler <DateTime>(PagedDayView_DateChanged).Handler;
            _pagedDayView.OnRequestExpand    += new WeakEventHandler(PagedDayView_OnRequestExpand).Handler;

            ViewModel.PropertyChanged += new WeakEventHandler <PropertyChangedEventArgs>(ViewModel_PropertyChanged).Handler;

            _container = new AdaptiveView(_cal, _pagedDayView, ViewModel)
            {
                TranslatesAutoresizingMaskIntoConstraints = false
            };

            ContentView.Add(_container);
            _container.StretchWidthAndHeight(ContentView);

            base.OnViewModelLoadedOverride();
        }
        public override void OnViewModelLoadedOverride()
        {
            var cal = new MyCalendarView()
            {
                TranslatesAutoresizingMaskIntoConstraints = false,
                DisplayMonth = ViewModel.DisplayMonth
            };

            cal.SetSemester(ViewModel.SemesterItemsViewGroup.Semester);
            cal.Provider             = new MyDataProvider(ViewModel.SemesterItemsViewGroup, cal);
            cal.DateClicked         += new WeakEventHandler <DateTime>(Cal_DateClicked).Handler;
            cal.DisplayMonthChanged += new WeakEventHandler <DateTime>(Cal_DisplayMonthChanged).Handler;

            View.Add(cal);
            cal.StretchWidth(base.View);
            cal.PinToTop(base.View);

            MainScreenViewController.ListenToTabBarHeightChanged(ref _tabBarHeightListener, delegate
            {
                cal.RemovePinToBottom(base.View).PinToBottom(base.View, (int)MainScreenViewController.TAB_BAR_HEIGHT);
            });

            base.OnViewModelLoadedOverride();
        }
                public MyCalendarDayView(Context context, MyCalendarView calendarView, CalendarViewModel viewModel) : base(context)
                {
                    _calendarView = calendarView;
                    _viewModel    = viewModel;

                    int margin = ThemeHelper.AsPx(Context, 1);

                    Clickable        = true;
                    LayoutParameters = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MatchParent,
                        LinearLayout.LayoutParams.MatchParent);

                    _backgroundView = new View(Context)
                    {
                        LayoutParameters = new FrameLayout.LayoutParams(
                            FrameLayout.LayoutParams.MatchParent,
                            FrameLayout.LayoutParams.MatchParent)
                        {
                            TopMargin    = margin,
                            LeftMargin   = margin,
                            RightMargin  = margin,
                            BottomMargin = margin
                        }
                    };
                    base.AddView(_backgroundView);

                    _backgroundOverlayView = new View(Context)
                    {
                        LayoutParameters = new FrameLayout.LayoutParams(
                            FrameLayout.LayoutParams.MatchParent,
                            FrameLayout.LayoutParams.MatchParent)
                        {
                            TopMargin    = margin,
                            LeftMargin   = margin,
                            RightMargin  = margin,
                            BottomMargin = margin
                        },
                        Visibility = ViewStates.Gone
                    };
                    base.AddView(_backgroundOverlayView);

                    var padding = ThemeHelper.AsPx(Context, 4);

                    _myHomeworkCircles = new MyHomeworkCircles(Context)
                    {
                        LayoutParameters = new FrameLayout.LayoutParams(
                            FrameLayout.LayoutParams.MatchParent,
                            FrameLayout.LayoutParams.WrapContent)
                        {
                            Gravity      = GravityFlags.Bottom,
                            LeftMargin   = padding,
                            BottomMargin = padding,
                            RightMargin  = padding
                        }
                    };
                    this.AddView(_myHomeworkCircles);

                    _tv = new TextView(Context)
                    {
                        Gravity          = GravityFlags.Top | GravityFlags.Right,
                        LayoutParameters = new FrameLayout.LayoutParams(
                            FrameLayout.LayoutParams.MatchParent,
                            FrameLayout.LayoutParams.WrapContent)
                        {
                            TopMargin   = ThemeHelper.AsPx(Context, 2),
                            RightMargin = padding
                        }
                    };
                    _defaultTextColors = _tv.TextColors;

                    this.AddView(_tv);

                    _selectedRectangleView = new View(Context)
                    {
                        LayoutParameters = new FrameLayout.LayoutParams(
                            FrameLayout.LayoutParams.MatchParent,
                            FrameLayout.LayoutParams.MatchParent),
                        Visibility = ViewStates.Gone
                    };
                    _selectedRectangleView.Background = ContextCompat.GetDrawable(Context, Resource.Drawable.CalendarSelectedDayBorder);
                    ViewCompat.SetBackgroundTintList(_selectedRectangleView, new ColorStateList(new int[][] { new int[0] }, new int[] { ColorTools.GetColor(this.Context, Resource.Color.accent) }));
                    this.AddView(_selectedRectangleView);

                    this.Click += MyCalendarDayView_Click;

                    UpdateSelectedStatus();

                    _calendarView.SelectedDateChanged += new WeakEventHandler <EventArgs>(_calendarView_SelectedDateChanged).Handler;
                }
 public override MyCalendarMonthView GetView(ViewGroup parent, MyCalendarView calendarView)
 {
     return(new MySmallCalendarMonthView(parent, calendarView, _viewModel, FirstDayOfWeek));
 }