如何访问 Windows Phone 的日历数据

2012/2/9

访问日历数据的过程是获取对 Appointments 对象的引用,对其执行异步搜索,然后捕获 Appointment 对象集合形式的结果。可以采用不同的方式使用结果,但本主题演示如何将结果绑定到用户界面或枚举结果。

注意注意:

Windows Phone SDK 7.1 为您提供对用户的日历数据(跨用户的不同帐户聚合在一起)的只读访问。有关更多信息,请参阅 Windows Phone 的联系人和日历

本主题包含以下各节:

在此过程中,您将代码放在仅用于测试的按钮单击事件中。在您自己的应用程序中,只要需要,您就可以访问日历数据。以下过程假定您拥有一个 Windows Phone 应用程序,该应用程序包含一个带有名为 ButtonAppointments 的按钮的页面。在此过程中,您搜索在接下来的 7 天中的所有约会。

重要说明重要说明:

Windows Phone 模拟器不包含示例约会。您应该使用物理设备测试这些过程。

访问日历数据的步骤

  1. 在您页面的代码隐藏文件顶部,添加以下语句。

    Imports Microsoft.Phone.UserData
    
  2. 添加以下代码。该代码包含按钮单击事件以及处理已完成的异步搜索事件的方法。

    Private Sub ButtonAppointments_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
    
        Dim appts As Appointments = New Appointments()
    
        'Identify the method that runs after the asynchronous search completes.
        AddHandler appts.SearchCompleted, AddressOf Appointments_SearchCompleted
    
        Dim start as DateTime = DateTime.Now
        Dim endTime as DateTime = start.AddDays(7)
        Dim max as integer = 20
    
        'Start the asynchronous search.
        appts.SearchAsync(start, endTime, max, "Appointments Test #1")
    End Sub
    
    Private Sub Appointments_SearchCompleted(sender As Object, e As AppointmentsSearchEventArgs)
    
        'Do something with the results.
        MessageBox.Show(e.Results.Count().ToString())
    End Sub
    

在此过程中,将约会搜索的结果数据直接绑定到用户界面。此过程假定您已完成前面部分的“访问日历数据”过程。

对约会数据进行数据绑定的步骤

  1. 为您的页面打开 XAML 编辑器并添加以下代码。可以将代码添加到 Content Panel 或 Layout Root GRID 元素。此 XAML 创建一个您绑定到约会数据的列表框。该列表框中每一行的数据模板都包含约会的主题。在您的应用程序中,可以创建所需的任何数据模板。有关更多信息,请参阅数据绑定概述数据模板概述

    <StackPanel Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
    
        <TextBlock Name="AppointmentResultsLabel" Text="results are loading..." Style="{StaticResource PhoneTextLargeStyle}" TextWrapping="Wrap" />
    
        <ListBox Name="AppointmentResultsData" ItemsSource="{Binding}" Height="200" Margin="24,0,0,0" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=Subject, Mode=OneWay}" />
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </StackPanel>
    
  2. 在您页面的代码隐藏文件中,将现有事件处理程序替换为以下代码。该代码通过将列表框的数据上下文设置为等于搜索结果,将约会数据绑定到用户界面。如果没有结果,则该代码包含错误处理。该代码还根据是否有结果更改列表框标签的文本。

    Private Sub Appointments_SearchCompleted(sender As Object, e As AppointmentsSearchEventArgs)
    
        Try
            'Bind the results to the user interface.
            AppointmentResultsData.DataContext = e.Results
    
        Catch ex As System.Exception
    
            'No results
        End Try
    
        If AppointmentResultsData.Items.Any() Then
    
            AppointmentResultsLabel.Text = "results"
        Else
            AppointmentResultsLabel.Text = "no results"
        End If
    End Sub
    
  3. 保存并生成您的解决方案。

  4. 启动您的应用程序并单击该按钮。

    数据将出现在列表框中。

在此过程中,枚举约会搜索的结果并将结果显示在一个消息框中。此过程假定您已完成本主题前面部分的“访问日历数据”过程。

枚举约会数据的步骤

  1. 在您页面的代码隐藏文件中,将现有事件处理程序替换为以下代码。该代码通过使用 for-each 循环枚举约会数据。

    Private Sub Appointments_SearchCompleted(sender As Object, e As AppointmentsSearchEventArgs)
    
        Dim sb As System.Text.StringBuilder = new System.Text.StringBuilder()
    
        For Each appt As Appointment In e.Results
    
            sb.AppendLine(appt.Subject)
        Next
    
        MessageBox.Show(sb.ToString())
    End Sub
    
  2. 保存并生成您的解决方案。

  3. 启动您的应用程序并单击该按钮。

    显示消息框。

在此过程中,使用 LINQ 优化约会搜索的结果。将结果数据直接绑定到用户界面。此过程假定您已完成本主题前面部分的“访问约会数据”过程。

使用 LINQ 的步骤

  1. 在您页面的代码隐藏文件中,将现有事件处理程序替换为以下代码。该代码查看非全天约会的约会结果。

    Private Sub Appointments_SearchCompleted(sender As Object, e As AppointmentsSearchEventArgs)
    
        Try
            'Bind the results to the user interface.
            AppointmentResultsDataLINQ.DataContext = _
                From appt As Appointment In e.Results _
                Where appt.IsAllDayEvent = false _
                Select appt
    
        Catch ex As System.Exception
    
            'No results
        End Try
    End Sub
    
    
  2. 为您的页面打开 XAML 编辑器并添加以下代码。可以将代码添加到 Content Panel 或 Layout Root GRID 元素。此 XAML 创建一个您绑定到约会数据的列表框。列表框的每一行都包含约会的主题。

    <ListBox Name="AppointmentResultsDataLINQ" ItemsSource="{Binding}" Height="200" Margin="24,0,0,0" >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding Path=Subject, Mode=OneWay}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    
  3. 保存并生成您的解决方案。

  4. 启动您的应用程序并单击该按钮。

    筛选后的数据将出现在列表框中。

显示: