מדריך Windows Phone – גישה לאנשי קשר ולפגישות ביומן
בגרסה החדשה של Windows Phone (גרסת "מנגו"), קיבלנו יכולת חדשה המאפשרת לנו לקרוא מידע מתוך רשימת אנשי הקשר של הפלאפון. באופן דומה ניתן לקרוא מידע מתוך יומן הפגישות של הפלאפון. בפרק זה נראה כיצד לבצע את שניהם.
נעיר כי המידע המתקבל הוא לקריאה בלבד, ולא ניתן לבצע בו שינויים.
קבלת מידע מתוך רשימת אנשי הקשר
כדי לקבל מידע מתוך רשימת אנשי הקשר אנחנו נעבוד עם האובייקט Contacts. לאובייקט זה יש פונקציה אסינכרונית בשם SearchAsync שמפעילה חיפוש על רשימת אנשי הקשר. כאשר החיפוש מסתיים נקרא האירוע SearchCompleted ואז ניתן לעבד את התוצאות. התוצאות שמגיעות הן רשימה של אובייקטים מסוג Contact שניתן לגשת אליה ע"י שימוש בתכונה e.Results, כאשר e הוא אובייקט הפרמטרים של האירוע SearchCompleted.
בדוגמא הבאה אנו שולפים את רשימת כל אנשי הקשר ומציגים אותה למסך.
ראשית נגדיר את ה XAML שידע להציג את רשימת אנשי הקשר:
<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>
כעת נכתוב את הקוד שמבצע את השליפה:
using System;
using System.Linq;
using Microsoft.Phone.Controls;
using Microsoft.Phone.UserData;
namespace ContactsDemo
{
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
Contacts contacts = new Contacts();
contacts.SearchCompleted += contacts_SearchCompleted;
contacts.SearchAsync(null, FilterKind.None, null);
}
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.Count != 0)
{
ContactResultsLabel.Text = "results";
}
else
{
ContactResultsLabel.Text = "no results";
}
}
}
}
נעיר כי הפונקציה SearchAsync יכולה לקבל מילת חיפוש ובהתאם לכך להחזיר רק את אנשי הקשר המתאימים למילת החיפוש המבוקשת. בדוגמא שלנו לא שמנו מילת חיפוש ולכן אנו מקבלים את כל הרשימה.
תוצאת הריצה של דוגמא זו תראה כך:
קבלת מידע על פגישות מתוך היומן
באופן דומה לקריאת המידע של אנשי קשר, ניתן לקרוא מידע על פגישות בעזרת שימוש באובייקט Appointments. גם לאובייקט זה יש פונקציה אסינכרונית בשם SearchAsync שמבצעת את החיפוש וכן אירוע SearchCompleted המודיע מתי החיפוש מסתיים.
בדוגמא הבאה אנו שולפים את כל הפגישות בשבוע האחרון ומציגים אותם למסך.
ראשית נכתוב את קוד ה 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>
כעת נכתוב את הקוד שמבצע את השליפה:
using System;
using System.Linq;
using Microsoft.Phone.Controls;
using Microsoft.Phone.UserData;
namespace AppointmentsDemo
{
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
Appointments appts = new Appointments();
//Identify the method that runs after the asynchronous search completes.
appts.SearchCompleted += Appointments_SearchCompleted;
DateTime start = DateTime.Now;
DateTime end = start.AddDays(7);
//Start the asynchronous search.
appts.SearchAsync(start, end, null);
}
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";
}
}
}
}
נעיר כי הפונקציה SearchAsync יכולה לקבל פרמטרים שיגבילו את מספר הפגישות בתוצאת החיפוש.
תגובות בפייסבוק