Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. WPF
  3. DataBinding avancé et DataGrid
Extrait - WPF Développez des applications structurées (MVVM, XAML...) (Nouvelle édition)
Extraits du livre
WPF Développez des applications structurées (MVVM, XAML...) (Nouvelle édition) Revenir à la page d'achat du livre

DataBinding avancé et DataGrid

Introduction

Ce chapitre est consacré aux subtilités relatives au binding dans WPF. À ce stade, les différents procédés, que ce soit pour les collections ou non, ont été vus. À présent, il s’agit d’étudier des aspects comme la conversion, la validation, la gestion des vues de collection et le multibinding.

Par ailleurs, un contrôle n’a pas encore été étudié : le DataGrid. Très utilisé dans le cadre du binding, c’est dans ce cadre qu’il doit donc être détaillé. C’est donc par l’étude de ce contrôle que commence ce chapitre, même s’il est déjà partiellement évoqué dans le chapitre précédent.

Le contrôle DataGrid

1. Introduction

Le présent chapitre va détailler diverses propriétés importantes du contrôle DataGrid. Ensuite, un exemple relativement complexe sera le support de la présentation concrète de toutes ses propriétés.

2. Utilisations de AutoGenerateColumns

AutoGenerateColumns permet de définir si les colonnes de la DataGrid sont déduites de la source de données et ainsi automatiquement générées (AutoGenerateColumns vaut True) ou au contraire si elles sont définies explicitement dans le code XAML à l’aide des balises suivantes (AutoGenerateColumns vaut False) :

  • DataGridTextColumn, utilisée pour les chaînes de caractères.

  • DataGridCheckBoxColumn, utilisée pour les valeurs booléennes.

  • DataGridHyperlinkColumn, pour les liens hypertextes.

  • DataGridComboBoxColumn, pour les valeurs sélectionnables dans une ComboBox.

  • DataGridTemplateColumn, pour les colonnes définies sur un Template avec la balise DataTemplate par exemple.

Quand AutoGenerateColumns vaut True, le type de chaque colonne est déduit du type de la valeur bindée dans la source de données.

3. Sélections diverses

Deux types de sélections sont paramétrables dans une DataGrid à l’aise des propriétés suivantes :

  • SelectionMode, qui prend les valeurs Single ou Extended, permet de définir si une ligne et une seule est sélectionnable ou si au contraire une sélection multiple est possible.

  • SelectionUnit, qui prend les valeurs Cell, CellAndRowHeader ou FullRow, permet de préciser sur quel périmètre s’effectue une sélection : une cellule, la cellule incluant le titre de la colonne ou toute la ligne. La valeur par défaut est FullRow.

4. Tris, ordres et redimensionnement

Essentiellement, quatre propriétés permettent de piloter ces aspects :

  • CanUserReorderColumns, qui autorise ou non le changement de l’ordre des colonnes.

  • CanUserResizeColumns, qui autorise ou non le redimensionnement des colonnes.

  • CanUserResizeRows, qui autorise ou non le redimensionnement des lignes.

  • CanUserSortColumns, qui autorise ou non le tri sur les colonnes.

5. Usage du RowDetailTemplate

Cette propriété RowDetailTemplate permet de fournir une zone de détails à...

Éléments avancés de binding

La section suivante est consacrée aux fonctions avancées du binding en WPF, en particulier aux différents outils fournis par l’objet Binding.

1. Conversion

Assez régulièrement, la fenêtre doit afficher une valeur légèrement différente, dans sa forme, de celle proposée par le type de l’attribut avec lequel elle est bindée. Par exemple :

  • On peut imaginer que l’on binde un attribut de classe de type Base64 avec une balise Image du code XAML. Dans ce cas il faut convertir la chaîne en Base64 en un type comme JPG ou PNG.

Certes, ces résolutions peuvent se faire complètement du côté vue-modèle. Mais il est parfois plus simple et plus efficace de les résoudre dans l’objet Binding lui-même grâce à sa propriété Converter.

À cette propriété Converter, on associe un objet implémentant l’interface IValueConverter qui propose deux méthodes :


public interface IValueConverter 
{ 
  public object Convert(object value, Type targetType, 
object parameter, CultureInfo culture); 
 
  public object ConvertBack(object value, Type targetType, 
object parameter, CultureInfo culture); 
}
 
  • La méthode Convert permet la conversion de la vue-modèle vers la vue.

  • La méthode ConvertBack propose l’éventuelle conversion réciproque de la vue vers la vue-modèle (utile en particulier quand le binding est bidirectionnel).

On peut prendre comme exemple le codage d’un binding permettant la conversion entre valeur booléenne et type Visibility d’un contrôle donné. Ainsi, on n’applique pas le binding sur la valeur booléenne elle-même, mais sur une conversion de celle-ci.

MainWindow.xaml


<Window x:Class="CH6_CONVERT.MainWindow" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/ 
presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
        xmlns:mc="http://schemas.openxmlformats.org/ 
markup-compatibility/2006" 
      ...