In the Scheduler control, create events to schedule meetings and plan important tasks in your daily life. The scheduler control allows you to add appointments with details such as start and end times, subjects, and locations. You can also create recurring appointments.
A recurring or repeating appointment is a useful scheduling feature that allows you to create events that will appear at the same time on different dates. For example, a birthday event that will repeat every year on the same date.
In this blog post, we’ll look at how to use the WinUI Scheduler control to create recurring appointments.
Note: If you are new to our WinUI Scheduler control, then please read the Getting Started with WinUI Scheduler documentation before proceeding.
Before getting started, let’s look at the different recurrence patterns.
The recurrence pattern specifies how frequently an event occurs. The event may occur on a daily, weekly, monthly, or yearly basis.
The following sections explain the different recurrence rules to be applied to specify the recurrence pattern.
The daily recurrence pattern is used to schedule daily repeated events, and occurrence repeated based on the interval.
Relevant properties:
Example
//Daily recurrence with count. FREQ=DAILY;INTERVAL=1;COUNT=10 //Daily recurrence with end date. FREQ=DAILY;INTERVAL=1;UNTIL=20200725
FREQ=DAILY;INTERVAL=2;
The weekly recurrence pattern schedules weekly repeated events on the same days every week and the occurrence is repeated based on the interval.
Relevant properties:
Example
//Weekly recurrence with count and day of week. FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE;COUNT=10 //Weekly recurrence with end date and day of week. FREQ=WEEKLY;INTERVAL=1;BYDAY=TU;UNTIL=20210725
FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,WE;
The monthly recurrence pattern schedules monthly repeated events on the same day of the month or the same week of the month and the occurrence is repeated based on the interval.
Relevant properties:
Example
//Monthly recurrence with count, month day. FREQ=MONTHLY;BYMONTHDAY=3;INTERVAL=1;COUNT=10 //Monthly recurrence with end date, day of week and week position. FREQ=MONTHLY;INTERVAL=1;BYDAY=MO;BYSETPOS=2;UNTIL=20200725
FREQ=MONTHLY;BYMONTHDAY=3;INTERVAL=2;
The yearly recurrence pattern schedules yearly repeated events on the same day of the year or the same week of the year and the occurrence is repeated based on the interval.
Relevant properties:
Example
//Yearly recurrence with count, month and week day. FREQ=YEARLY;BYDAY=SU;BYSETPOS=3;BYMONTH=8;INTERVAL=1;COUNT=10 //Yearly recurrence with end date, month, and month day. FREQ=YEARLY;BYMONTHDAY=16;BYMONTH=6;INTERVAL=1;UNTIL=20250725
FREQ=YEARLY;BYDAY=SU;BYSETPOS=3;BYMONTH=8;INTERVAL=2;
Follow these steps to schedule recurring appointments:
xmlns:scheduler="using:Syncfusion.UI.Xaml.Scheduler" <scheduler:SfScheduler x:Name="Schedule" ViewType="Week"> </scheduler:SfScheduler>
Schedule.DisplayDate = new DateTime(2021, 3, 28, 11, 0, 0); // Creating an instance for schedule appointment collection. var appointmentCollection = new ScheduleAppointmentCollection(); //Adding schedule appointment in the schedule appointment collection. var scheduleAppointment = new ScheduleAppointment { //Id to recurrence pattern appointment. Id = 1, Subject = "Daily scrum meeting", StartTime = new DateTime(2021, 3, 28, 11, 0, 0), EndTime = new DateTime(2021, 3, 28, 12, 0, 0), AppointmentBackground = new SolidColorBrush(Color.FromArgb(255, 0, 120, 215)), Foreground = new SolidColorBrush(Colors.White), //Add recurrence rule to repeat the event. RecurrenceRule = "FREQ=DAILY;INTERVAL=1;COUNT=10" }; //Adding the schedule appointment to the schedule appointment collection. appointmentCollection.Add(scheduleAppointment); //Adding the schedule appointment collection to the ItemsSource of SfScheduler. Schedule.ItemsSource = appointmentCollection;
To learn more, refer to the recurring events in WinUI Scheduler demo.
The Scheduler control’s recurrence pattern exception feature allows you to remove a specific occurrence from a recurring appointment or change the details of any occurrence.
For example, you can delete any recurring appointment that falls on a holiday or modify any occurrence based on your availability on a specific day. The RecurrenceExceptionDates property of ScheduleAppointment is used to remove a specific occurrence of a recurring event.
Refer to the following code example for more details.
Schedule.DisplayDate = new DateTime(2021, 3, 28, 11, 0, 0); // Creating an instance for schedule appointment collection. var appointmentCollection = new ScheduleAppointmentCollection(); // Recurrence and exception appointment. var scheduleAppointment = new ScheduleAppointment { Id = 1, Subject = "Daily scrum meeting", StartTime = new DateTime(2021, 3, 28, 11, 0, 0), EndTime = new DateTime(2021, 3, 28, 12, 0, 0), AppointmentBackground = new SolidColorBrush(Color.FromArgb(255, 0, 120, 215)), Foreground = new SolidColorBrush(Colors.White), RecurrenceRule = "FREQ=DAILY;INTERVAL=1;COUNT=10" }; //Adding the recurring or pattern appointment to the AppointmentCollection. appointmentCollection.Add(scheduleAppointment); //Add exception dates to avoid occurrence on specific dates. DateTime changedExceptionDate = scheduleAppointment.StartTime.AddDays(3).Date; scheduleAppointment.RecurrenceExceptionDates = new ObservableCollection<DateTime>() { changedExceptionDate, }; //Setting the AppointmentCollection as an ItemSource of SfScheduler. this.Schedule.ItemsSource = appointmentCollection;
You can modify any particular occurrence of a recurring appointment by using the RecurrenceExceptionDates and RecurrenceId properties of ScheduleAppointment.
Refer to the following code example for more details.
Schedule.DisplayDate = new DateTime(2021, 3, 28, 11, 0, 0); // Creating an instance for schedule appointment collection. Var appointmentCollection = new ScheduleAppointmentCollection(); // Recurrence and exception appointment. Var scheduleAppointment = new ScheduleAppointment { Id = 1, Subject = “Daily scrum meeting”, StartTime = new DateTime(2021, 3, 28, 11, 0, 0), EndTime = new DateTime(2021, 3, 28, 12, 0, 0), AppointmentBackground = new SolidColorBrush(Color.FromArgb(255, 0, 120, 215)), Foreground = new SolidColorBrush(Colors.White), RecurrenceRule = “FREQ=DAILY;INTERVAL=1;COUNT=10” }; //Adding the recurring or pattern appointment to the AppointmentCollection. appointmentCollection.Add(scheduleAppointment); //Add exception dates to avoid occurrence on specific dates. DateTime changedExceptionDate = scheduleAppointment.StartTime.AddDays(3).Date; scheduleAppointment.RecurrenceExceptionDates = new ObservableCollection<DateTime>() { changedExceptionDate, }; //Creating an exception occurrence appointment by changing the start time or end time. // RecurrenceId is set to 1(parent recurrence Id value), so it will be the changed occurrence for the above-created pattern appointment. Var exceptionAppointment = new ScheduleAppointment() { Id = 2, Subject = “Scrum meeting – Changed Occurrence”, StartTime = new DateTime(changedExceptionDate.Year, changedExceptionDate.Month, changedExceptionDate.Day, 13, 0, 0), EndTime = new DateTime(changedExceptionDate.Year, changedExceptionDate.Month, changedExceptionDate.Day, 14, 0, 0), AppointmentBackground = new SolidColorBrush(Color.FromArgb(255, 112, 173, 71)), Foreground = new SolidColorBrush(Colors.White), RecurrenceId = 1 }; // Adding an exception occurrence appointment to the AppointmentCollection. appointmentCollection.Add(exceptionAppointment); //Setting the AppointmentCollection as a ItemSource of SfScheduler. This.Schedule.ItemsSource = appointmentCollection;
To learn more, refer to the recursive appointment exception demo.
Rather than creating multiple appointments for the same time on different dates, you can use Scheduler control’s recurring appointment editor to make a single appointment recurring.
Double-click on an appointment to open the following editor.
A single or series of recurring appointments can also be modified using the recurrence editor in WinUI Scheduler.
In this blog post, we had a quick overview of scheduling recurring appointments in the WinUI Scheduler. You can explore other features in the Scheduler control through our documentation, where you can find detailed explanations of each feature with code examples.
Please feel free to try out the samples available in the GitHub location and share your feedback or ask questions in the comments section. You can also contact us through our support forums, support tickets, or feedback portal. As always, we are happy to assist you!