Trouver les erreurs de Binding
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