Skip to content

How to customize appointment appearance and show details in popup on Xamarin.Forms Schedule (SfSchedule)

Notifications You must be signed in to change notification settings

SyncfusionExamples/appointment-template-schedule-xamarin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

How to customize appointment appearance and show details in popup on Xamarin.Forms Schedule (SfSchedule)

You can customize the default appearance of appointment using AppointmentTemplate in Xamarin.Forms SfSchedule.

You can also refer the following article.

https://www.syncfusion.com/kb/11791/how-to-customize-appointment-appearance-and-show-details-in-popup-on-xamarin-forms-schedule

STEP 1: Create a custom appointment detail.

public class Meeting
    {
        public string EventName { get; set; }
        public DateTime From { get; set; }
        public DateTime To { get; set; }
        public Color Color { get; set; }
        public string District { get; set; }
        public string City { get; set; }
        public int NumberOfStudents { get; set; }
    }

STEP 2: Create a custom appointment collection for displaying the schedule appointments in SfSchedule, and bind it to DataSource of SfSchedule.

public class SchedulerViewModel : INotifyPropertyChanged
    {
        /// <summary>
        /// collecions for meetings.
        /// </summary>
        private ObservableCollection<Meeting> meetings;
 
        /// <summary>
        /// color collection.
        /// </summary>
        private List<Color> colorCollection;
 
        /// <summary>
        /// current day meeting.
        /// </summary>
        private List<string> currentDayMeetings;
 
        public SchedulerViewModel()
        {
            this.AppointmentDataTemplate = new DataTemplate(() => new AppointmentDataTemplate());
            this.Meetings = new ObservableCollection<Meeting>();
            this.AddAppointmentDetails();
            this.AddAppointments();
        }
 
        /// <summary>
        /// Gets or sets meetings.
        /// </summary>
        public ObservableCollection<Meeting> Meetings
        {
            get
            {
                return this.meetings;
            }
 
            set
            {
                this.meetings = value;
                this.RaiseOnPropertyChanged("Meetings");
            }
        }
 
        /// <summary>
        /// Gets or sets the AppointmentDataTemplate.
        /// </summary>
        public DataTemplate AppointmentDataTemplate { get; set; }
 
        /// <summary>
        /// adding appointment details.
        /// </summary>
        private void AddAppointmentDetails()
        {
            this.currentDayMeetings = new List<string>();
            this.currentDayMeetings.Add("General Meeting");
            this.currentDayMeetings.Add("Plan Execution");
            this.currentDayMeetings.Add("Project Plan");
            this.currentDayMeetings.Add("Consulting");
            this.currentDayMeetings.Add("Support");
            this.currentDayMeetings.Add("Development Meeting");
            this.currentDayMeetings.Add("Scrum");
            this.currentDayMeetings.Add("Project Completion");
            this.currentDayMeetings.Add("Release updates");
            this.currentDayMeetings.Add("Performance Check");
 
            this.colorCollection = new List<Color>();
            this.colorCollection.Add(Color.FromHex("#FFA2C139"));
            this.colorCollection.Add(Color.FromHex("#FFD80073"));
            this.colorCollection.Add(Color.FromHex("#FF1BA1E2"));
            this.colorCollection.Add(Color.FromHex("#FFE671B8"));
            this.colorCollection.Add(Color.FromHex("#FFF09609"));
            this.colorCollection.Add(Color.FromHex("#FF339933"));
            this.colorCollection.Add(Color.FromHex("#FF00ABA9"));
            this.colorCollection.Add(Color.FromHex("#FFE671B8"));
            this.colorCollection.Add(Color.FromHex("#FF1BA1E2"));
            this.colorCollection.Add(Color.FromHex("#FFD80073"));
            this.colorCollection.Add(Color.FromHex("#FFA2C139"));
            this.colorCollection.Add(Color.FromHex("#FFA2C139"));
            this.colorCollection.Add(Color.FromHex("#FFD80073"));
            this.colorCollection.Add(Color.FromHex("#FF339933"));
            this.colorCollection.Add(Color.FromHex("#FFE671B8"));
            this.colorCollection.Add(Color.FromHex("#FF00ABA9"));
        }
 
        /// <summary>
        /// Adds the appointments.
        /// </summary>
        private void AddAppointments()
        {
            var today = DateTime.Now.Date;
            var random = new Random();
            for (int month = -1; month < 2; month++)
            {
                for (int day = -5; day < 5; day++)
                {
                    for (int count = 0; count < 2; count++)
                    {
                        var meeting = new Meeting();
                        meeting.From = today.AddMonths(month).AddDays(random.Next(1, 28)).AddHours(random.Next(9, 18));
                        meeting.To = meeting.From.AddHours(1);
                        meeting.EventName = this.currentDayMeetings[random.Next(7)];
                        meeting.Color = this.colorCollection[random.Next(14)];
                        meeting.City = "Qatif";
                        meeting.District = "Hellat Muhaysh";
                        meeting.NumberOfStudents = random.Next(1, 28);
                        this.Meetings.Add(meeting);
                    }
                }
            }
        }
 
        /// <summary>
        /// Occurs when property changed.
        /// </summary>
        public event PropertyChangedEventHandler PropertyChanged;
 
        /// <summary>
        /// Invoke method when property changed.
        /// </summary>
        /// <param name="propertyName">property name</param>
        private void RaiseOnPropertyChanged(string propertyName)
        {
            this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

STEP 3: Customize the appearance of appointment using the AppointmentTemplate property of schedule and map the custom appointments to StartTimeMapping, EndTimeMapping, ColorMapping, SubjectMapping of AppointmentMapping to display the custom appointments in schedule.

<schedule:SfSchedule x:Name="Schedule"
                                     ScheduleView="WeekView"
                                     DataSource="{Binding Meetings}"
                                     AppointmentTemplate="{Binding AppointmentDataTemplate}">
                <schedule:SfSchedule.AppointmentMapping>
                   <schedule:ScheduleAppointmentMapping
                        ColorMapping="Color"
                        EndTimeMapping="To"
                        StartTimeMapping="From"
                        SubjectMapping="EventName"
                        />
                </schedule:SfSchedule.AppointmentMapping>
            <schedule:SfSchedule.BindingContext>
                <local:SchedulerViewModel/>
            </schedule:SfSchedule.BindingContext>
</schedule:SfSchedule>

STEP 4: Create a custom view for displaying the circle appointments in schedule.

<?xml version="1.0" encoding="UTF-8"?>
<AbsoluteLayout xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="ScheduleXamarin.AppointmentDataTemplate"
             Margin="0" 
             Padding="0"
             BackgroundColor="White">
    <Frame
            BackgroundColor="{Binding Color}"
            AbsoluteLayout.LayoutBounds="0.5,0.5,30,30"
            AbsoluteLayout.LayoutFlags="PositionProportional"
            CornerRadius="15"
            HasShadow="False"
            VerticalOptions="Center" 
            HorizontalOptions="Center"
        >
    </Frame>
</AbsoluteLayout>

STEP 5: The appointment details can be obtained and displayed in popup by using the schedule CellTapped event.

private void Schedule_CellTapped(object sender, CellTappedEventArgs e)
{
            if (e.Appointment != null)
            {
                var appname = (e.Appointment as Meeting).EventName;
                var City = (e.Appointment as Meeting).City;
                var District = (e.Appointment as Meeting).District;
                var noOfStudents = (e.Appointment as Meeting).NumberOfStudents;
 
                this.ContentPage.DisplayAlert(appname, "City:" + " " + City + "\n" + "District:" + " " + District + "\n" + "NumberofStudents:" + " " + noOfStudents + "\n" , "ok");
            }
}

Output

CircleAppointment

About

How to customize appointment appearance and show details in popup on Xamarin.Forms Schedule (SfSchedule)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages