导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

如何访问 Windows Phone 8 的联系人数据

2014/6/18

适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

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

本主题讨论只读访问用户的联系人数据。有关为提供读和写访问的应用创建自定义联系人存储的信息,请参见 Windows Phone 8 的自定义联系人存储

本主题包括以下部分。

在此过程中,您将代码放在仅用于测试的按钮单击事件中。在您自己的应用程序中,只要需要,您就可以访问联系人数据。以下过程假定您拥有一个 Windows Phone 应用程序,该应用程序包含一个带有名为 ButtonContacts 的按钮的页面。在此过程中,将筛选器种类设置为返回所有联系人的 None。有关更多信息,请参见 Windows Phone 8 的联系人筛选和匹配

说明注意:

Windows Phone 模拟器包含示例联系人。可以使用 Windows Phone 模拟器或物理设备测试这些过程。

访问联系人数据的步骤

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

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

    private void ButtonContacts_Click(object sender, RoutedEventArgs e)
    {
        Contacts cons = new Contacts();
    
        //Identify the method that runs after the asynchronous search completes.
        cons.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(Contacts_SearchCompleted);
    
        //Start the asynchronous search.
        cons.SearchAsync(String.Empty, FilterKind.None, "Contacts Test #1");
    }
    
    void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
    {
        //Do something with the results.
        MessageBox.Show(e.Results.Count().ToString());
    }
    

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

对联系人数据进行数据绑定的步骤

  1. 为页面打开 XAML 编辑器并添加以下代码。可以将代码添加到内容面板或布局根 GRID 元素。此 XAML 创建一个绑定到联系人数据的列表框。该列表框中每一行的数据模板都包含联系人的姓名。在您的应用程序中,可以创建所需的任何数据模板。有关更多信息,请参见 Windows Phone 8 的数据绑定数据模板概述

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

    void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
    {
        try
        {
            //Bind the results to the user interface.
            ContactResultsData.DataContext = e.Results;
        }
        catch (System.Exception)
        {
            //No results
        }
    
        if (ContactResultsData.Items.Any())
        {
            ContactResultsLabel.Text = "results";
        }
        else
        {
            ContactResultsLabel.Text = "no results";
        }
    }
    
  3. 保存并生成您的解决方案。

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

    数据将出现在列表框中。

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

枚举联系人数据的步骤

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

    void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
    
        foreach (Contact con in e.Results)
        {
            sb.AppendLine(con.DisplayName);
        }
    
        MessageBox.Show(sb.ToString());
    }
    
  2. 保存并生成您的解决方案。

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

    显示消息框。

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

警告说明警告:

联系人数据的大小可能变化很大。与使用内置搜索(预先索引)相比,LINQ 速度较慢。如果可能,应该使用内置的搜索筛选器。有关更多信息,请参见 Windows Phone 8 的联系人筛选和匹配

使用 LINQ 的步骤

  1. 在页面的代码隐藏文件中,将现有事件处理程序替换为以下代码。此代码查询具有包含“example”的电子邮件地址的联系人结果。Windows Phone 模拟器中的两个示例联系人都包含此字符串。

    void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
    {
        try
        {
            ContactResultsDataLINQ.DataContext =
                from Contact con in e.Results
                from ContactEmailAddress a in con.EmailAddresses
                where a.EmailAddress.Contains("example")
                select con;
        }
        catch (System.Exception)
        {
            //No results
        }
    }
    
  2. 为页面打开 XAML 编辑器并添加以下代码。可以将代码添加到内容面板或布局根 GRID 元素。此 XAML 创建一个绑定到联系人数据的列表框。列表框的每一行都包含联系人的电子邮件地址。请注意,每个联系人都具有多个电子邮件地址;此 XAML 显示第一个电子邮件地址。

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

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

    筛选后的数据将出现在列表框中。如果是在 Windows Phone 模拟器上测试,则将看到以下内容。

    Chris@example.com

    Julia@example.com

显示:
© 2014 Microsoft