내보내기(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의 사용자 지정 연락처 저장소를 참조하세요.

이 항목에는 다음 단원이 포함되어 있습니다.

이 절차에서는 테스트 용도로만 버튼 클릭 이벤트에 코드를 추가합니다. 응용프로그램 내에서 연락처 데이터가 필요한 어디에서든 연락처 데이터에 액세스할 수 있습니다. 다음 절차에서는 ButtonContacts라는 버튼이 포함된 페이지가 있는 Windows Phone 응용프로그램을 사용한다고 가정합니다. 이 절차에서는 필터 종류를 모든 연락처를 반환하는 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

표시:
© 2015 Microsoft