How to bind JSON data to Xamarin.Forms Calendar (SfCalendar) ?
You can bind the SfCalendar appointments from JSON by following the steps:
C#
Create a JSON data model.
public class JSONData
{
public string Subject { get; set; }
public string StartTime { get; set; }
public string EndTime { get; set; }
public string IsAllDay { get; set; }
public string Background { get; set; }
}
Note:
Convert String type into DateTime type when adding items to the local collection from JSON data model, since JSON does not support DateTime type.
C#
Create data for the data model.
//// Add data for JSON data model
private string JsonData =
"[{\"Subject\": \"General Meeting\",\"StartTime\": \"30 August 2018 02:00:00 PM\",\"EndTime\":\"30 August 2018 03:00:00 PM\",\"Background\":\"#5944dd\", \"IsAllDay\":\"True\"}, " +
"{\"Subject\": \"Plan Execution\",\"StartTime\": \"22 August 2018 08:00:00 AM\",\"EndTime\":\"22 August 2018 10:00:00 AM\",\"Background\":\"#ff0000\", \"IsAllDay\":\"False\"}," +
"{\"Subject\": \"Performance Check\",\"StartTime\": \"17 August 2018 05:00:00 PM\",\"EndTime\":\"17 August 2018 06:00:00 PM\",\"Background\":\"#5944dd\", \"IsAllDay\":\"False\"}," +
"{\"Subject\": \"Consulting\",\"StartTime\": \"03 August 2018 09:00:00 AM\",\"EndTime\":\"03 August 2018 11:00:00 AM\",\"Background\":\"#ed0497\", \"IsAllDay\":\"True\"}," +
"{\"Subject\": \"Yoga Therapy\",\"StartTime\": \"27 August 2018 09:00:00 AM\",\"EndTime\":\"27 August 2018 11:00:00 AM\",\"Background\":\"#ff0000\", \"IsAllDay\":\"False\"}," +
"{\"Subject\": \"Project Plan\",\"StartTime\": \"30 August 2018 10:00:00 AM\",\"EndTime\":\"30 August 2018 11:00:00 AM\",\"Background\":\"#ed0497\", \"IsAllDay\":\"False\"} ]";
C#
Deserialize the JSON data as list of JSON data model.
List<JSONData> jsonDataCollection = JsonConvert.DeserializeObject<List<JSONData>>(JsonData);
C#
Load the JSON data list into the DataForm model.
foreach (var data in jsonDataCollection)
{
this.Appointments.Add(new CalendarInlineEvent()
{
Subject = data.Subject,
StartTime = Convert.ToDateTime(data.StartTime),
EndTime = Convert.ToDateTime(data.EndTime),
Color = Color.FromHex(data.Background),
IsAllDay = Convert.ToBoolean(data.IsAllDay)
});
}
XAML
Bind it to a calendar using the DataSource property.
<calendar:SfCalendar x:Name="calendar"
VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand"
DataSource="{Binding Appointments}"
ShowInlineEvents="True"
InlineViewMode="Agenda">
<calendar:SfCalendar.BindingContext>
<local:CalendarViewModel/>
</calendar:SfCalendar.BindingContext>
</calendar:SfCalendar>
Output
|
