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 :
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
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 :