Il arrive d’avoir des erreurs de Binding dans le XAML. En effet le Binding est défini en tant que chaîne de caractère ce qui ne permet pas la détection des erreurs lors de la compilation. Voici quelques infos et techniques que j’ai pu rassembler sur le sujet pendant mon auto-formation sur WPF.

Utilisation des Traces

Types de Traces

System.Windows.Data

Cette trace est probablement la plus utile des traces. Elle fournit toutes sortes d’informations sur le DataBinding WPF, même les warnings quand il est impossible de résoudre le Binding. Cette Trace fait une seule chose que les autres ne font pas : elle s’active automatiquement quand vous lancez le programme en mode débug. Pour la voir il suffit d’aller dans la partie Debug de la fenêtre de sortie en cours d’exécution.

System.Windows.DependencyProperty

Probablement la moins utile des traces. Elle fournit juste des informations sur les DependencyProperties. Elle ne fournit, en revanche, aucune information sur l’affectation ou le calcul de cette propriété.

System.Windows.Freezable

Permet de tracer les problèmes de freeze qui ne génèrent pas d’exception. Par exemple, si vous appelez la méthode CanFreeze et qu’elle vous retourne false, cette trace pourrai vous aider à déterminer exactement ce qui n’a pas pu être figé.

System.Windows.RoutedEvent

Permet de tracer sur le chemin des RoutedEvents. Ceci inclut une trace indiquant quel EventListener a traité l’événement.

System.Windows.Media.Animation

Envoi des traces quand les animations sont : Démarrée, Stoppée, Mise en pause, Remise en route, etc.

System.Windows.NameScope

Envoi une trace quand un nom est enregistré. Elle fournit le nom et l’objet.

System.Windows.ResourceDictionary

Envoi des traces quand une ressource est créée, supprimée, utilisée, etc. Comme il est possible d’avoir plusieurs dictionnaires de ressources définissant la même ressource, elle peut être utile pour déterminer exactement d’où vient cette ressource.

System.Windows.Markup

Envoi des traces quand du XAML (où BAML) est chargé, avec l’information comme les objets créés, les propriétés renseignées et le type des convertisseurs (converter) utilisés.

System.Windows.Documents

Trace les informations à propos des erreurs de formatage des pages pour les documents paginés.

Activation et utilisation des traces

L’activation des traces se fait dans le fichier app.config du projet. Dans ce fichier il suffit de créer dans la partie <configuration><sytems.diagnostics>..</sytems.diagnostics></configuration> trois sections.

La première sera <sources> qui contiendra la définition des traces.

La deuxième sera <switches> qui définira le niveau d’information des messages fournit.

La troisième sera <sharedListeners> qui définira le mode de sortie des informations.

Voici ci-dessous un exemple regroupant toutes les traces et les sections.

<configuration>
    <system.diagnostics>
        <sources>
        <!--
            <source name="System.Windows.Data" switchName="SourceSwitch">
                <listeners>
                    <add name="textListener" />
                </listeners>
            </source>
        -->
        <!--
            <source name="System.Windows.DependencyProperty" switchName="SourceSwitch">
                <listeners>
                    <add name="textListener" />
                </listeners>
            </source>
        -->
        <!--
            <source name="System.Windows.Freezable" switchName="SourceSwitch">
                <listeners>
                    <add name="textListener" />
                </listeners>
            </source>
        -->
        <!--
            <source name="System.Windows.RoutedEvent" switchName="SourceSwitch">
                <listeners>
                    <add name="textListener" />
                </listeners>
            </source>
        -->
        <!--
            <source name="System.Windows.Media.Animation" switchName="SourceSwitch">
                <listeners>
                    <add name="textListener" />
                </listeners>
            </source>
        -->
        <!--
            <source name="System.Windows.NameScope" switchName="SourceSwitch">
                <listeners>
                    <add name="textListener" />
                </listeners>
            </source>
        -->
        <!--
            <source name="System.Windows.ResourceDictionary" switchName="SourceSwitch">
                <listeners>
                    <add name="textListener" />
                </listeners>
            </source>
        -->
        <!--
            <source name="System.Windows.Markup" switchName="SourceSwitch">
                <listeners>
                    <add name="textListener" />
                </listeners>
            </source>
        -->
        <!--
            <source name="System.Windows.Documents" switchName="SourceSwitch">
                <listeners>
                    <add name="textListener" />
                </listeners>
            </source>
        -->
        </sources>
        <switches>
            <add name="SourceSwitch" value="All" />
            <!--add name="SourceSwitch" value="Off" -->
            <!--add name="SourceSwitch" value="Verbose" -->
            <!--add name="SourceSwitch" value="Warning" -->
            <!--add name="SourceSwitch" value="Activity" -->
        </switches>
        <sharedListeners>
            <!-- Ce listener envoi la sortie dans la console -->
            <add name="console"
                type="System.Diagnostics.ConsoleTraceListener"
                initializeData="false"/>
            <!-- Ce listener envoi la sortie 
                dans un fichier XML nommé AvTrace.xml -->
            <add name="xmlListener"
                type="System.Diagnostics.XmlWriterTraceListener"
                traceOutputOptions="None"
                initializeData="AvTrace.xml" />
            <!-- Ce listener envoi la sortie
                dans un fichier nommé AvTrace.txt -->
            <add name="textListener"
                type="System.Diagnostics.TextWriterTraceListener"
                initializeData="AvTrace.txt" />
        </sharedListeners>
        <trace autoflush="true" indentsize="4"></trace>
    </system.diagnostics>
</configuration>

Source : http://blogs.msdn.com/b/mikehillberg/archive/2006/09/14/wpftracesources.aspx