private void PreviousSlot_Click(object sender, RoutedEventArgs e)
        {
            var serviceProvider       = ScheduleView.GetServiceProvider();
            var slotSelectionService  = serviceProvider.GetService <SlotSelectionService>();
            var slotIterationProvider = serviceProvider.GetService <ISlotIterationService>();

            Slot previous;
            var  last = slotSelectionService.GetSelection();

            if (last == null)
            {
                previous = slotIterationProvider.GetSlots().Last();
            }
            else
            {
                previous = last.Copy();

                previous.End   = last.Start;
                previous.Start = last.Start.Add(-last.Duration());

                if (!ScheduleView.VisibleRange.Contains(previous.Start))
                {
                    previous = slotIterationProvider.GetSlots().Last();
                }
            }
            slotSelectionService.SetSelection(previous);
            ScheduleView.ScrollIntoView(previous);
        }
        private void NextSlot_Click(object sender, RoutedEventArgs e)
        {
            var serviceProvider       = ScheduleView.GetServiceProvider();
            var slotSelectionService  = serviceProvider.GetService <SlotSelectionService>();
            var slotIterationProvider = serviceProvider.GetService <ISlotIterationService>();

            Slot next;
            var  start = slotSelectionService.GetSelection();

            if (start == null)
            {
                next = slotIterationProvider.GetSlots().First();
            }
            else
            {
                next       = start.Copy();
                next.Start = start.End;
                next.End   = start.End.Add(start.Duration());

                if (!ScheduleView.VisibleRange.Contains(next.Start))
                {
                    next = slotIterationProvider.GetSlots().First();
                }
            }
            slotSelectionService.SetSelection(next);
            ScheduleView.ScrollIntoView(next);
        }
        private void NextAppointment_Click(object sender, RoutedEventArgs e)
        {
            var serviceProvider             = ScheduleView.GetServiceProvider();
            var occurrenceSelectionService  = serviceProvider.GetService <AppointmentSelectionService>();
            var occurrenceIterationProvider = serviceProvider.GetService <IOccurrenceIterationProvider>();
            var start = occurrenceSelectionService.GetSelection().FirstOrDefault();
            var next  = occurrenceIterationProvider.GetOccurrencesFrom(start).Skip(1).FirstOrDefault() ?? occurrenceIterationProvider.GetOccurrences().FirstOrDefault();

            if (next != null)
            {
                occurrenceSelectionService.SetSelection(next);
                ScheduleView.ScrollIntoView(next);
            }
        }
        private void PreviousAppointment_Click(object sender, RoutedEventArgs e)
        {
            var serviceProvider             = ScheduleView.GetServiceProvider();
            var occurrenceSelectionService  = serviceProvider.GetService <AppointmentSelectionService>();
            var occurrenceIterationProvider = serviceProvider.GetService <IOccurrenceIterationProvider>();
            var start = occurrenceSelectionService.GetSelection().FirstOrDefault();

            var previous = occurrenceIterationProvider.GetOccurrencesTo(start).Take(occurrenceIterationProvider.GetOccurrencesTo(start).Count() - 1).LastOrDefault() ?? occurrenceIterationProvider.GetOccurrences().LastOrDefault();

            if (previous != null)
            {
                occurrenceSelectionService.SetSelection(previous);
                ScheduleView.ScrollIntoView(previous);
            }
        }