New to Telerik UI for .NET MAUI? Start a free 30-day trial

Creating a Custom Appointment Model in Scheduler for .NET MAUI

Environment

Product Scheduler for .NET MAUI

Description

When working with the Scheduler in .NET MAUI, there might be scenarios requiring additional data to be stored within appointments. This necessitates creating a custom appointment model class that extends the capabilities of the default appointment model.

This KB article also answers the following questions:

  • How can I add extra properties to the Scheduler's appointments?
  • Is it possible to customize the appointment model in .NET MAUI Scheduler?
  • How to display additional appointment data in .NET MAUI Scheduler?

Solution

To include extra properties in the appointment model, implement a custom class that inherits from Telerik.Maui.Controls.Scheduler.Appointment. Override the Copy and CopyFrom methods for proper data handling. Additionally, utilize a custom AppointmentTemplate to display the new properties in the Scheduler.

Step 1: Create a Custom Appointment Class

Define a custom class that extends Appointment and add your custom properties. Override the Copy and CopyFrom methods to ensure the custom properties are correctly handled during internal operations.

public class MyCustomAppointment : Appointment
{
    private string token;

    public string Token
    {
        get => this.token;
        set => this.UpdateValue(ref this.token, value);
    }

    public override IAppointment Copy()
    {
        var myAppt = new MyCustomAppointment();
        myAppt.CopyFrom(this);
        return myAppt;
    }

    public override void CopyFrom(IAppointment other)
    {
        var myAppt = other as MyCustomAppointment;
        if (myAppt != null)
        {
            this.Token = myAppt.Token;
        }

        base.CopyFrom(other);
    }
}

Step 2: Customize the Appointment Template

To display the custom properties in the Scheduler, define a DataTemplate incorporating the new properties and assign it to the AppointmentTemplate property of the Scheduler.

<DataTemplate x:Key="MyCustomAppointmentTemplate">
    <telerik:RadBorder CornerRadius="4"
                    IsClippedToBounds="True"
                    BackgroundColor="#D2C6E6">
        <Grid>
            <BoxView WidthRequest="4"
                    BackgroundColor="#8660C5"
                    HorizontalOptions="Start" />
            <VerticalStackLayout  Margin="6, 0, 4, 0" Spacing="4">
                <Label Text="{Binding Occurrence.Appointment.Subject}"
                    TextColor="Black" />
                <Label Text="{Binding Occurrence.Appointment.Token}"
                    TextColor="Red" />
            </VerticalStackLayout>
        </Grid>
    </telerik:RadBorder>
</DataTemplate>

<telerik:RadScheduler x:Name="scheduler"
            AppointmentsSource="{Binding Appointments}"
            AppointmentTemplate="{StaticResource MyCustomAppointmentTemplate}">
    <telerik:RadScheduler.ViewDefinitions>
        <telerik:DayViewDefinition />
        <telerik:WeekViewDefinition Title="Work Week" IsWeekendVisible="False" />
        <telerik:MonthViewDefinition />
    </telerik:RadScheduler.ViewDefinitions>
</telerik:RadScheduler>

Step 3: Customize the Appointment Dialog (Optional)

To enable users to edit the custom property through the EditAppointmentDialog, modify its ControlTemplate. Refer to the Controls Samples app for an example of dialog customization.

See Also

In this article