정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Windows Phone 8의 일정 데이터에 액세스하는 방법

2014-06-18

적용 대상: Windows Phone 8 및 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

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

이 항목에서는 사용자의 연락처 데이터에 대한 읽기 전용 액세스에 대해 설명합니다. 읽기 및 쓰기 권한을 제공하는 앱의 사용자 지정 연락처 저장소를 만드는 방법에 대한 자세한 내용은 Windows Phone 8의 사용자 지정 연락처 저장소를 참조하세요.

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

이 절차에서는 테스트 용도로만 버튼 클릭 이벤트에 코드를 추가합니다. 자체 응용프로그램의 경우 필요하면 어디에서나 일정 데이터에 액세스할 수 있습니다. 다음 절차에서는 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 편집기를 열고 다음 코드를 추가합니다. 콘텐츠 패널 또는 레이아웃 루트 GRID 요소에 코드를 추가할 수 있습니다. 이 XAML은 약속 데이터에 바인딩할 목록 상자를 만듭니다. 목록 상자의 각 행에 대한 데이터 템플릿에는 약속 제목이 포함되어 있습니다. 약속에서 원하는 데이터 템플릿을 만들 수 있습니다. 자세한 내용은 Windows Phone 8의 데이터 바인딩데이터 템플릿 개요를 참조하세요.

    <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 편집기를 열고 다음 코드를 추가합니다. 콘텐츠 패널 또는 레이아웃 루트 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. 응용프로그램을 시작하고 버튼을 클릭합니다.

    필터링된 데이터가 목록 상자에 나타납니다.

표시: