방법: Windows Phone의 일정 데이터 액세스

2012-02-09

일정 데이터에 액세스하는 프로세스는 Appointments 개체에 대한 참조를 가져오고, 이 참조에서 비동기 검색을 수행한 다음, 그 결과를 Appointment 개체의 컬렉션으로 캡처하는 것입니다. 그 결과를 다른 방식으로 사용할 수 있으며, 이 항목에서는 결과를 사용자 인터페이스에 바인딩하거나 결과를 통해 열거하는 방법에 대해 설명합니다.

참고참고:

Windows Phone SDK 7.1 에서는 사용자의 각기 다른 계정에서 취합된 사용자의 일정 데이터에 대한 읽기 전용 액세스를 제공합니다. 자세한 내용은 Windows Phone의 연락처 및 일정을 참조하십시오.

이 항목은 다음 섹션으로 이루어져 있습니다.

이 프로시저에서는 테스트 용도로만 버튼 클릭 이벤트에 코드를 넣습니다. 응용프로그램 내에서 일정 데이터가 필요한 어디에서든 일정 데이터에 액세스할 수 있습니다. 다음 절차에서는 ButtonAppointments이라는 버튼이 포함된 페이지가 있는 Windows Phone 응용프로그램을 사용한다고 가정합니다. 이 프로시저에서는 앞으로 7일 이내의 모든 약속을 검색합니다.

중요중요:

Windows Phone 에뮬레이터에는 샘플 약속이 포함되어 있지 않습니다. 이 프로시저는 실제 단말기를 사용하여 테스트해야 합니다.

일정 데이터에 액세스하려면

  1. 페이지에 대한 코드 숨김 파일의 맨 위에 다음 문을 추가합니다.

    using Microsoft.Phone.UserData;
    
  2. 다음 코드를 추가합니다. 이 코드는 버튼 클릭 이벤트 및 비동기 검색의 완료된 이벤트를 처리할 메서드를 포함합니다.

    private void ButtonAppointments_Click(object sender, RoutedEventArgs e)
    {
        Appointments appts = new Appointments();
    
        //Identify the method that runs after the asynchronous search completes.
        appts.SearchCompleted += new EventHandler<AppointmentsSearchEventArgs>(Appointments_SearchCompleted);
    
        DateTime start = DateTime.Now;
        DateTime end = start.AddDays(7);
        int max = 20;
    
        //Start the asynchronous search.
        appts.SearchAsync(start, end, max, "Appointments Test #1");
    }
    
    void Appointments_SearchCompleted(object sender, AppointmentsSearchEventArgs e)
    {
        //Do something with the results.
        MessageBox.Show(e.Results.Count().ToString());
    }
    

이 프로시저에서는 약속 검색 결과를 사용자 인터페이스에 직접 데이터 바인딩합니다. 이 절차에서는 이전 단원에서 "일정 데이터 액세스" 절차를 완료한 것으로 가정합니다.

약속 데이터를 데이터 바인딩하려면

  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. 페이지의 코드 숨김 파일에서 기존 이벤트 처리기를 다음 코드로 바꿉니다. 그리고 검색 결과와 같은 목록 상자의 데이터 컨텍스트를 설정하여 약속 데이터를 사용자 인터페이스에 바인딩합니다. 이 코드는 결과가 없을 경우의 오류 처리를 포함하며, 결과의 유무에 따라 목록 상자 레이블의 텍스트도 변경합니다.

    void Appointments_SearchCompleted(object sender, AppointmentsSearchEventArgs e)
    {
        try
        {
            //Bind the results to the user interface.
            AppointmentResultsData.DataContext = e.Results;
        }
        catch (System.Exception)
        {
            //No results
        }
    
        if (AppointmentResultsData.Items.Any())
        {
            AppointmentResultsLabel.Text = "results";
        }
        else
        {
            AppointmentResultsLabel.Text = "no results";
        }
    }
    
  3. 솔루션을 저장하고 빌드합니다.

  4. 응용프로그램을 시작하고 버튼을 클릭합니다.

    데이터가 목록 상자에 표시됩니다.

이 프로시저에서는 약속 검색 결과를 열거하여 메시지 상자에 표시합니다. 이 절차에서는 이 항목의 이전 단원에서 "일정 데이터 액세스" 절차를 완료한 것으로 가정합니다.

약속 데이터를 열거하려면

  1. 페이지의 코드 숨김 파일에서 기존 이벤트 처리기를 다음 코드로 바꿉니다. 이 코드는 for-each 루프를 사용하여 약속 데이터를 열거합니다.

    void Appointments_SearchCompleted(object sender, AppointmentsSearchEventArgs e)
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
    
        foreach (Appointment appt in e.Results)
        {
            sb.AppendLine(appt.Subject);
        }
    
        MessageBox.Show(sb.ToString());
    }
    
  2. 솔루션을 저장하고 빌드합니다.

  3. 응용프로그램을 시작하고 버튼을 클릭합니다.

    메시지 상자가 표시됩니다.

이 프로시저에서는 LINQ를 사용하여 약속 검색 결과를 상세 검색합니다. 그런 다음 그 결과를 사용자 인터페이스에 직접 데이터 바인딩합니다. 이 절차에서는 이 항목의 이전 단원에서 "약속 데이터 액세스" 절차를 완료한 것으로 가정합니다.

LINQ를 사용하려면

  1. 페이지의 코드 숨김 파일에서 기존 이벤트 처리기를 다음 코드로 바꿉니다. 이 코드는 종일 약속이 아닌 약속에 대해 결과를 쿼리합니다.

    void Appointments_SearchCompleted(object sender, AppointmentsSearchEventArgs e)
    {
        try
        {
            AppointmentResultsDataLINQ.DataContext =
                from Appointment appt in e.Results
                where appt.IsAllDayEvent == false
                select appt;
    
        }
        catch (System.Exception)
        {
            //No results
        }
    }
    
  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. 응용프로그램을 시작하고 버튼을 클릭합니다.

    필터링된 데이터가 목록 상자에 표시됩니다.

표시: