KIN : Les premiers Windows Phones avec Windows Mobile 7 voient le jour#

Aujourd’hui Microsoft, Sharp, Verizon Wireless et Vodafone ont dévoilé KIN, la première gamme de Windows Phone commercialisés qui embarquent le tant attendu Windows Mobile 7. Cette gamme est composée de deux Windows Phones : “KIN ONE” et “KIN TOW”. Avec leurs formes rondelettes et fun et leur clavier confortables ces deux smartphones vont tenter de séduire un public jeune en leur proposant de vivre leur quotidien en toute simplicité. Sans rien installer de plus, ces deux Windows phones vont permettre à leurs utilisateurs de rester connecté aux différents réseaux sociaux, d’écouter leurs morceaux de musique préférés, prendre des photos qu’ils pourront par ailleurs partager très simplement avec leurs amis, envoyer des emails, surfer sur internet, …

Pour voir un peu à quoi ça ressemble vous pouvez consulter le site KIN

Thursday, May 06, 2010 8:25:54 PM (Romance Standard Time, UTC+01:00) #    Comments [0]  | 

 

Personnaliser les colonnes d'un DataGrid en Silverlight : 3ème partie, utilisation du ValueConverter#

Dans les deux première parties de cette série d’articles nous avons utilisé une DataGrid pour afficher des données provenant d’un service WCF en utilisant l’option de génération automatique de colonnes. Ensuite nous avons personnalisé ces colonnes dans un premier temps à l’aide du DataGridTextColumn et du DataGridCheckBoxColumn, et dans un deuxième temps avec le DataGridTemplateColumn. Voici le résultat obtenu :

Nous allons maintenant ajouter l’affichage de la date de réalisation de la tâche mais comme la date est de type DateTime lorsqu’on va la binder dans une colonne de type Text, nous allons voir la date et heure complète alors que ce qui nous intéresse c’est uniquement la date. Dans cet article nous allons donc utiliser un ValueConverter pour afficher la date au format attendu.

Pour suivre cet exemple vous pouvez télécharger les sources joints à cet article.

Commençons d’abord par rajouter l’affichage de la date, dans le projet TasksManager.View (l’application Silverlight), répertoire Model, ouvrez la classe Task et rajouter la propriété date de réalisation comme suit :

public DateTime? RealizationDate { get; set; }

Dans le même projet, le répertoire ViewModel ouvrez la classe TasksViewModel et localisez la méthode taskServiceClient_GetListCompleted et rajoutez la ligne d’affectation de la date de réalisation comme suit :

void taskServiceClient_GetListCompleted(object sender, TasksManager.View.TasksService.GetListCompletedEventArgs e)
{
       List<Task> resultTasks = new List<Task>();
       foreach (TasksService.Task t in e.Result)
       {
           Task mt = new Task();
           mt.Id = t.id;
           mt.Name = t.name;
           mt.RealizationDate = t.realizationDate;
           if (t.realized.HasValue)
               mt.Realized = t.realized.Value;
           resultTasks.Add(mt);
       }
       this.Tasks = resultTasks;
}

Et enfin, dans le même projet, répertoire Views, ouvrez le fichier Tasks.xaml et dans <Data:DataGrid.Columns>, rajoutez la colonne suivante :

<Data:DataGridTextColumn Binding="{Binding RealizationDate}" Header="Date de réalisation"></Data:DataGridTextColumn>

Lancez maintenant le projet, voici ce que vous devriez obtenir cela :

image

La date de réalisation s’affiche pour les tâches pour les quelles la date est renseignée.

Nous voyons bien, comme prévu, que la date d’affiche avec un format long. Ceci parce que le ToString() d’une date convertit la date en chaîne de caractère avec ce format. Nous allons maintenant mettre en place un converter pour afficher uniquement la date.

Dans le projet TasksManager.View, répertoire Views, ajoutez un nouveau répertoire et appelez le “Converters”. Dans ce répertoire ajoutez une nouvelle classe et nommez la “ShortDateFormatConverter”. Ensuite, implémentez l’interface IValueConverter en ajoutant l’espace de noms System.Windows.Data

image

Pour implémenter l’interface IValueConverter nous devons définir deux méthodes :

- La méthode Convert : qui convertit l’objet à binder vers l’objet que nous voulons afficher. Dans notre cas cette méthode prend en paramètre la date de réalisation de type DateTime et nous allons faire en sorte qu’elle renvoie une chaine de caractère représentant la date au format court.

- La méthode ConvertBack : qui fait le chemin inverse, c’est à dire qu’elle prend en paramètre la chaine de caractère affichée et représentant la date au format court pour la convertir au format d’origine (dans notre cas DateTime). Cette méthode est utile lorsqu’on met en place un Binding TwoWay, mais dans notre cas nous n’allons pas l’implémenter parce que notre but est uniquement l’affichage.

Voici le code de la classe ShortDateFormatConverter

public class ShortDateFormatConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        DateTime? date = value as DateTime?;

        if (date != null)
            return date.Value.ToShortDateString();

        return date;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Pour utiliser ce converter dans notre vue nous devons tout d’abord l’enregistrer comme ressource dans notre UserControl, ouvrez le fichier Tasks.xaml et placez vous juste après la déclaration du UserControl

<UserControl.Resources>
    <Converters:ShortDateFormatConverter x:Key="ShortDateFormatter"></Converters:ShortDateFormatConverter>
</UserControl.Resources>

Et enfin remplacez la ligne que nous avons ajouté au tout début de cet article

<Data:DataGridTextColumn Binding="{Binding RealizationDate}" Header="Date de réalisation"></Data:DataGridTextColumn>

Par celle – ci:

<Data:DataGridTextColumn Binding="{Binding RealizationDate, Converter={StaticResource ShortDateFormatter}}" Header="Date de réalisation"></Data:DataGridTextColumn>

Lancez maintenant votre application, vous devriez avoir ce résultat :

image

Tuesday, March 30, 2010 9:52:35 PM (Romance Standard Time, UTC+01:00) #    Comments [0]  | 

 

SqlFunctions dans Entity Framework 4#

Dans les versions précédentes d’Entity Framework, faire un calcul de différence entre deux dates avec linq to entities était assez laborieux, les fonctions c# n’étaient pas prise en compte dans les requêtes linq to entities et nous étions obligé soit de passer par une colonne calculée au sein de la Base de données soit modifier les fichiers de mapping pour écrire la requête sql à la main et utiliser la fonction DATEDIFF de SQL Server.

Avec Entity Framework 4 et l’apparition de la classe SqlFunctions, tout ça c’est de l’histoire ancienne. Cette classe contient un bon nombre de fonctions Sql Server qui peuvent être utilisées directement dans nos requêtes Linq To Entities et qui vont être traduites vers les fonctions SQL dans un contexte de requête à la BDD. Ces fonctions sont exposées directement par SQL Server et sont donc propres au Provider Sql Server. Parmis ces fonctions nous trouvons le DateDiff qui va nous permettre de calculer la différence entre 2 dates.

image

Soit cette requête linq to entites :

var requete = from s in context.Person
            select new { Nom = s.FirstName + " " + s.LastName, 
                                 s.BirthDate, 
                                 Age = System.Data.Objects.SqlClient.SqlFunctions.DateDiff("year", s.BirthDate, DateTime.Now) 
};

Du côté de profiler, voici la requête générée :

image

Nous remarquons que notre fonction DATEDIFF a été traduite littéralement.

Faisons maintenant un petit tour sur Reflector, voici ce que nous pouvons trouver

image

En effet, cette fonction est une fonction Sql Server mappée tout simplement. Donc en ce qui concerne les SqlFunctions, il vaut mieux se référer directement à la documentation Transact – SQL.

Friday, March 19, 2010 10:29:31 PM (Romance Standard Time, UTC+01:00) #    Comments [0]  | 

 

All content © 2010, Zied Nemili