IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Comprendre le Binding en WPF et Silverlight


précédentsommairesuivant

IX. Déboguer efficacement le Binding

IX-A. Le Binding au design-time

Il peut être très intéressant lorsque l'on utilise le designer de Visual Studio ou Expression Blend, d'avoir le retour visuel immédiat. Ainsi, on voit directement des données peupler les contrôles, cela permet d'avoir une première impression sur le rendu (et d'éventuellement détecter certaines erreurs). Pour cela, il faut faire plusieurs choses : importer les namespaces d et mc ci-après, déclarer un d:DataContext qui sera le DataContext au design-time et enfin avoir un objet « Blendable ». Voici un exemple :

 
Sélectionnez
<Window x:Class="BindingTutorial.WpfApplication.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"
        mc:Ignorable="d"
        xmlns:WpfApplication="clr-namespace:BindingTutorial.WpfApplication"
        d:DataContext="{d:DesignInstance Type=WpfApplication:MyObject, IsDesignTimeCreatable=True}">
</Window>

On voit les deux namespaces importés et l'utilisation du DataContext par la construction d'une instance de MyObject. Il est à noter l'instruction mc:Ignorable=« d » qui indique que tout ce qui est dans le namespace d doit être ignoré à la compilation, sans elle plusieurs erreurs auraient été levées. Le dernier point est d'avoir un objet « Blendable » : lorsque Visual Studio effectue le rendu, il essaie réellement de créer une instance de l'objet en exécutant le constructeur. Par conséquent, on peut donner des valeurs aux propriétés, générer toute une arborescence, etc. Certaines opérations sont cependant interdites comme, par exemple, des appels à des Webservices. Un objet « Blendable » est donc un objet qui pourra être affiché dans le designer de Visual Studio (ou Expression Blend), car il n'exécute aucune opération interdite.

IX-B. Les erreurs de Binding

Bien souvent, lorsqu'un binding ne fonctionne pas, une erreur apparait dans la console lors de l'exécution en Debug. Cette erreur est assez souvent explicite pour vite comprendre le problème. Voici un exemple :

System.Windows.Data Error: 40 : BindingExpression path error: 'MyProperty' property not found on 'object' ''MyObject' (HashCode=28918197)'. BindingExpression:Path=MyProperty; DataItem='MyObject' (HashCode=28918197); target element is 'TextBox' (Name=''); target property is 'Text' (type 'String')

Ici, il semblerait que j'ai tenté de binder la propriété Text (de type String) d'une TextBox sans nom à la propriété MyProperty sur une instance de MyObject.

Il est possible de configurer la verbosité des traces de Binding pour WPF. Pour cela, il suffit d'aller dans les options de Visual Studio, rubrique Debugging > Output Window > WPF Trace Settings > Data Binding . Le niveau par défaut est Warning.

IX-C. Espionner le Binding

Bien souvent, il est utile de vouloir intercepter le Binding lors de l'exécution et pouvoir naviguer. Une astuce consiste à créer un Converter « passe-plat » dans lequel on peut poser des points d'arrêt dans le Convert et le ConvertBack. Ainsi, il est possible d'inspecter ce qui transite. Un tel Converter ressemble à ceci :

 
Sélectionnez
public class DebugConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }
}

Dorénavant, avec Silverlight 5, un bien meilleur outil s'offre à nous ! En effet, il est possible de poser des points d'arrêt dans le XAML et ainsi déboguer le Converter. Il est donc beaucoup plus simple de comprendre ce qui pose problème.


précédentsommairesuivant

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2012 Nathanael Marchand. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.