Un contrôle de recherche de Contact pour Mango !

Une API particulièrement attendue par les développeurs WP7 a fait son apparition dans Mango.
Il s’agit de la classe Contacts qui permet de rechercher dans le répertoire du téléphone les contacts qui correspondent à une chaine de caractères selon, éventuellement, un filtre.

plusieurs filtres sont disponibles :

  • None : Aucun filtre
  • PinnedToStart : Les contacts epinglés sur la page d’acuueil du téléphone
  • EmailAddress : Les adresses emails
  • PhoneNumber : Les numero de téléphone
  • DisplayName : Le nom affiché sur le téléphone du contact prénom nom et sans doute le middle name.

Le filtre le plus intéressant est sans doute DisplayName puisqu’il nous permet de rechercher un contact par son nom. Voici donc un exemple d’utilisation du filtre DisplayName :

Contacts contacts = new Contacts();

contacts.SearchCompleted += (object s, ContactsSearchEventArgs args) =>
    {
        foreach (Contact contact in args.Results)
        {
            MessageBox.Show(contact.DisplayName);
        }

    };
// on recherche les contacts commençant par 's'
contacts.SearchAsync("s", FilterKind.DisplayName, null);

La recherche s’effectuera selon le type du filtre de manière relativement intelligente. Ainsi pour notre filtre DisplayName, la recherche s’effectuera sur les premières lettres du nom et du prénom.

Le contact ou les contacts que l’on reçoit en résultat sont très riches et comportent bien plus que l’adresse mail ou le téléphone.

On va pouvoir récupérer par exemple les anniversaires ou les sociétés de nos contacts ou encore leur photo (via la méthode GetPicture).

Je vous laisse découvrir le reste des membres de la classes contact à cette adresse :

http://msdn.microsoft.com/en-us/library/microsoft.phone.userdata.contact_members(v=VS.92).aspx

Le seul bémol, c’est qu’il n’existe pas (pour le moment) de chooser, ces boites de dialogues fournit par le systeme à Silverlight, spécifique aux contacts.

J’ai donc écrit un usercontrol qui mime grossièrement celui du hub contact.

Le control est composé de trois fichiers qu’il vous faudra copier dans votre projet :

  • ContactItems.cs
  • SearchContact.xaml
  • SearchContact.xaml.cs

Il suffit ensuite de déplacer de votre toolbox le control SearchContact (après au moins une compilation) vers le Grid LayoutRoot de la façon suivante :

    <Grid x:Name="LayoutRoot" Background="Transparent">

        <Grid>
             <!-- votre interface -->
        </Grid>

        <my:SearchContact x:Name="SearchContact" MaxResult="20" TitleVisibility="Visible" Title="all" WaterMark="Enter a name" NoResultText="No result" />

    </Grid>

Les différentes propriétés disponibles du control sont :

  • MaxResult : qui borne le nombre maximum de contacts (15 par défaut)
  • Title : le titre qui se trouve sous lta texbox (all dans la vidéo)
  • TitleVisibility : qui affiche ou non le titre
  • WaterMark : le texte affiche dans textbox lorsqu’ilk n’y en a pas
  • NoResultText : le texte affiché lorsqu’il ny’a pas de resultat.

WaterMark et NoResultText permette de localiser facilement le controle.

Par défaut le controle sera invisible. Pour le déclencher il suffit d’appeler sa méthode Show.

            this.SearchContact.Show();

pour effectuer une recherche directement :

            this.SearchContact.Show("sa");

J’espère que ce control vous servira en attendant que le toolkit officlel ne s’étoffe de nouveaux controles compatibles Mango :)
Vous trouverez les sources du control et de l’exemple dans cette solution.

PS : n’ayant pas de Mango sous la main et l’émulateur n’ayant pas de contacts avec image, je ne peux vous affirmer, pour le moment, que les image des contacts s’affichent correctement.

7 Responses to Un contrôle de recherche de Contact pour Mango !

  1.  
  2.  
  3.  
  4.  

    Hello,

    Thank you very much for the code. Im using this a contact chooser atm, I just need to get the display name of a contact and didnt find any good tasks for this. Hope Microsoft releases a contact chooser task in next version.

    What is the licence for this code? Am I free to reuse in potentially commercial app?

    Thanks a lot!
    Fredrik

  5. Hi Fredrik,
    This code is totaly free to reuse in a commercial app.
    Bye !
    Sam

     
  6.  

    Great job! But I got your solution and I have fixed just a mistake:

    I think you forgot to bind the images to the contacts (maybe is not the final code), but with this Source= any problem is solved!
    I am aiming to use your code in my app also, if that works I will be back to tell you 😀

  7. Hi Kayatt,
    Yes I forgot to bind the source of the image but I’m too lazy to modify the projet :)

     

leave your comment