internal void Update(int year,
                             int month,
                             IEnumerable <DateTime> selectedDates)
        {
            if (!_isItemsInitialized)
            {
                CalendarXItemModels = new ObservableCollection <CalendarXItemModel>();
            }

            var currentDay = new DateTime(year, month, 1);
            var dayOfWeek  = currentDay.DayOfWeek;
            var preDelta   = dayOfWeek - FirstDayOfWeek;

            preDelta = preDelta < 0 ? (preDelta + 7) : preDelta;

            currentDay = currentDay.AddDays(-preDelta);

            for (var i = 0; i < 42; i++)
            {
                CalendarXItemModel dayItem = null;
                if (!_isItemsInitialized)
                {
                    dayItem = new CalendarXItemModel();
                    CalendarXItemModels.Add(dayItem);
                }
                else
                {
                    dayItem = CalendarXItemModels[i];
                }

                dayItem.Content = currentDay.Day;
                if (IsDateAvailable(currentDay))
                {
                    dayItem.IsEnabled  = true;
                    dayItem.IsChecked  = selectedDates == null ? false : selectedDates.Any(x => x.Equals(currentDay));
                    dayItem.Date       = currentDay;
                    dayItem.IsDownplay = !(currentDay.Year == year && currentDay.Month == month);
                    dayItem.IsToday    = IsTodayHighlighted ? IsToday(currentDay) : false;
                    dayItem.IsInRange  = Mode == CalendarXMode.DateRange ?
                                         IsInRange(currentDay, selectedDates?.ToArray())
                        : false;
                }
                else
                {
                    dayItem.IsEnabled = false;
                }


                currentDay = currentDay.AddDays(1);
            }

            _isItemsInitialized = true;
        }
        internal void Update(int year, int month)
        {
            if (!_isItemsInitialized)
            {
                CalendarXItemModels = new ObservableCollection <CalendarXItemModel>();
            }
            var startYear = year - 7;

            if (startYear < 1)
            {
                startYear = 1;
            }

            for (var i = 0; i < 15; i++)
            {
                var currentYear            = new DateTime(startYear + i, month, 1);
                CalendarXItemModel dayItem = null;
                if (!_isItemsInitialized)
                {
                    dayItem = new CalendarXItemModel();
                    CalendarXItemModels.Add(dayItem);
                }
                else
                {
                    dayItem = CalendarXItemModels[i];
                }

                dayItem.Content = (startYear + i).ToString("D4");

                if (IsDateAvailable(currentYear))
                {
                    dayItem.IsEnabled  = true;
                    dayItem.IsChecked  = year == (startYear + i);
                    dayItem.Date       = currentYear;
                    dayItem.IsDownplay = false;
                    dayItem.IsToday    = false;
                    dayItem.IsInRange  = false;
                }
                else
                {
                    dayItem.IsEnabled = false;
                }
            }

            _isItemsInitialized = true;
        }
        internal void Update(int year,
                             int month)
        {
            if (!_isItemsInitialized)
            {
                CalendarXItemModels = new ObservableCollection <CalendarXItemModel>();
            }
            for (var i = 0; i < 12; i++)
            {
                var currentMonth           = new DateTime(year, i + 1, 1);
                CalendarXItemModel dayItem = null;
                if (!_isItemsInitialized)
                {
                    dayItem = new CalendarXItemModel()
                    {
                        Content = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i + 1),
                    };
                    CalendarXItemModels.Add(dayItem);
                }
                else
                {
                    dayItem = CalendarXItemModels[i];
                }

                if (IsDateAvailable(currentMonth))
                {
                    dayItem.IsEnabled  = true;
                    dayItem.IsChecked  = month == i + 1;
                    dayItem.Date       = currentMonth;
                    dayItem.IsDownplay = false;
                    dayItem.IsToday    = false;
                    dayItem.IsInRange  = false;
                }
                else
                {
                    dayItem.IsEnabled = false;
                }
            }

            _isItemsInitialized = true;
        }