エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 の連絡先データにアクセスする方法

2014/06/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 エミュレーターのサンプル連絡先の 2 つにこの文字列が含まれています。

    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

表示:
© 2015 Microsoft