[Silverlight 5] Comment débugger vos bindings

La version béta de Silverlight 5 béta est sortie cette semaine au MIX de Las Vegas. Une des nouveautés apportée par cette version est la possibilité de mettre des points d’arrêts (breakpoint) dans le XAML afin de débugger les bindings.

 

Qui n’a jamais perdu de temps à chercher pourquoi un binding ne fonctionnait pas correctement dans son application Silverlight ?

 

Pour illustrer cette article nous allons utiliser le code suivant (disponible en téléchargement à la fin de l’article) :

 

MainPage.xaml

 

<UserControl x:Class="SLBindingDebug.MainPage"
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"
d:DesignHeight="300" d:DesignWidth="400">

  <StackPanel x:Name="LayoutRoot" Background="White">
    <TextBlock Text="{Binding ID}" />
    <TextBlock Text="{Binding Name}" />
  </StackPanel>
</UserControl>

 

MainPage.xaml.cs

 

using System.Windows.Controls;

namespace SLBindingDebug
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            this.DataContext = new Test() { Name = "Aymeric", Id = 1 };
        }
    }

    public class Test
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

 

Dans cet exemple simple, l’erreur faite avec le binding est simple, on utilise ID à la place d’Id.

Le résultat obtenu est le suivant :

 

 

Résultat souhaité :

 

 

Comment faisait-on avec Silverlight 4 ?

 

Avec  Silverlight 4, la seule information que nous avons se trouve dans la console de sortie de Visual Studio (Output) au milieu d’autres lignes :

 

System.Windows.Data Error: BindingExpression path error: ‘ID’ property not found on ‘SL4BindingDebug.Test’ ‘SL4BindingDebug.Test’ (HashCode=56680499). BindingExpression: Path=’ID’ DataItem=’SL4BindingDebug.Test’ (HashCode=56680499); target element is ‘System.Windows.Controls.TextBlock’ (Name= »); target property is ‘Text’ (type ‘System.String’).

 

Ce message indique bien que le "chemin" "ID" n’a pas été trouvé dans "SL4BindingDebug.Test". Ici le scénario est assez simple, cependant dans des scenarii plus complexes avec des changements de DataContext, des ListBox, etc., le debug devient plus compliqué.

 

La nouveauté de Silverlight 5

 

Avec Silverlight 5, nous avons la possibilité de mettre des points d’arrêts dans la XAML pour identifier les problèmes de binding :

 

 

Au lancement de l’application l’application s’arrête sur le point d’arrêt et affiche un certain nombre d’informations :

 

  •  
  • Binding : utile pour débugguer le StringFormat, le FallbackValue, TargetNullValue, etc.
  • Error : erreur identique à ce que nous avions avec Silverlight 4
  • FinalSource : représente le DataContext

 

Comme pour du C#, vous pouvez faire des TracePoint, des conditions sur le break, etc…

 

Les projets utilisés pour cet article sont disponibles ici.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.