Working With Calendar in Window Phone 7


In this article we are going to see how to use the Calendar application to access the calendar data and use it across the development as and when needed. In order to use the calendar object we are going to use the reference of the Appointments object and do an Async search to get the results and show it on to a collection of Appointment objects. The end result in the appointments object can be used in different ways as per the requirement by binding to different controls and to do some schedule. Appointment class is to interact with user appointment data and is inherited from the Microsoft.Phone.UserData namespace. Let us see the step by step process on how to use the calendar objects and list the appointments.


Open Visual Studio 2010 and create a new Silverlight for Windows Phone 7 application with a valid project name as shown in the screen below.


Now in order to fetch the details of the calendar appointments and show it to the end users, we will add controls from the tools as shown in the screen below. We can just drag and drop the controls from the tool box or write the XAML code as shown in the screen below or copy paste the XAML code.

XAML Code:

<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
    <TextBlock x:Name="ApplicationTitle" Text="F5DEBUG WP7 TUTORIALS" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="calendar" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
<!--ContentPanel - place additional content here-->

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
 <Button Content="Get Appointment" Height="83" HorizontalAlignment="Left" Margin="30,16,0,0" 
Name="btnAppointment"  VerticalAlignment="Top" Width="402" Click="btnAppointment_Click" 
 <ListBox Name="lstAppointment" ItemsSource="{Binding}" Margin="47,188,36,52" >
 <TextBlock Name="txtResults" Text="{Binding Path=DisplayName, Mode=OneWay}" />
TextBlock Height="41" HorizontalAlignment="Left" Margin="47,118,0,0" Name="txtAppointments" 
Text="List of Appointments" VerticalAlignment="Top" Width="373" 



Now we need to add code to do listing of the calendar appointments to the list view. First add the namespace

using Microsoft.Phone.UserData;

Now add the button click event code, here we are going to create an object of the Appointment class and do an AsyncSearch. We need to provide the start time and end time to fetch the appointment details and also should provide the maximum count. Copy and paste the below code to the code behind for the button click event.

C# Code:

private void btnAppointment_Click(object sender, RoutedEventArgs e)


     Appointments aAppointment = new Appointments();

     aAppointment.SearchCompleted += new EventHandler<AppointmentsSearchEventArgs>(GetAppointments);

     DateTime starttime = DateTime.Now;

     DateTime endtime = starttime.AddDays(10);

     int maxAppointment = 20;

     aAppointment.SearchAsync(starttime, endtime, maxAppointment, null);


void GetAppointments(object sender, AppointmentsSearchEventArgs e)




         lstAppointment.DataContext = e.Results;


    catch (System.Exception)


        txtAppointments.Text = "No Appointments Found!!!";


   if (lstAppointment.Items.Any())


       txtAppointments.Text = "Below is the List of Appointments";




        txtAppointments.Text = "No Appointments Found!!!";




Now the above code will pull the information from the appointments object and bind it to the data context of the list box. If there is no appointments available we can see an empty result as well. To check the application just run the application by pressing F5 directly from the keyboard or by selecting build and execute solution from the tool bar and we can see the screen as shown in the screen below.


Since we are in the emulator and we don't have any appointments saved the list is empty. If any appointments are saved in the physical device we will get the complete list of the next 10 days to be displayed here in the list box.


So in this article we have seen how to use the calendar object to fetch the appointment details and list it out. We can customize to use the appointments object to bind to different data binding options as per the requirements.