Typage du datacontext – binding avec WPF directement dans le XAML

Pour pouvoir typer le binding d’une fenêtre en WPF il suffit d’utiliser une simple astuce a défaut de pouvoir le faire plus simplement dans visual studio. Cela fonctionne pour moi dans visual studio 2010, avec un projet en vb.Net sous le framework 4.

Le principe est simple : nous allons modifier la définition XAML de la fenêtre pour lui ajouter des propriétés et surtout définir notre datacontext.

En premier, vous devez ajouter le namespace contenant l’objet utilisé pour la liaison de données (dans l’exemple ce sera le namespace du projet actuel) :

<Window x:Class="Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1"
    Title="Window1"
    Height="300" Width="567">

Ensuite vous allez cliquer sur votre « objet » fenêtre dans le designer WPF et cliquez sur le petit carré en bas à droite de la fenêtre :

WPF

Vous devez cliquer deux fois pour revenir en mode normal (taille fixe). En effectuant cette opération vous allez ajouter à votre code XAML deux namespaces XML :

mc:Ignorable="d" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

Vous devez enfin ajouter la description du datacontext avec votre objet :

d:DataContext="{d:DesignInstance Type=local:MonObjet}"

Ce qui nous donne au final dans le XAML :

<Window x:Class="Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1"
    Title="Window1" 
    mc:Ignorable="d" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    d:DataContext="{d:DesignInstance Type=local:MonObjet}"
    Height="300" Width="567">

A partir de maintenant il est possible depuis l’éditeur WPF de parcourir les propriétés du datacontext et donc de notre objet pour sélectionner les liaisons de données.

Voici un exemple avec la propriété Text d’un TextBox ayant une liaison de données vers le datacontext, qui est du type « Personne » qui sert d’exemple :

WPF2

Qui se traduit dans le XAML par :

Text="{Binding Path=Nom}"

Mais c’est plus sympa de le faire visuellement, surtout si on a beaucoup de propriété…