Comment débugger vos bindings en Silverlight 5

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 :

Silverlight app

Résultat souhaité :

Silverlight app 2

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 :

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

Binding debug

  • 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…


Voir également