Home > Softwareentwicklung > WPF Databinding Probleme mit Snoop finden

WPF Databinding Probleme mit Snoop finden

January 15th, 2009 Bernd

WPF Databindings werden häufig in XAML definiert. Da kann es schon mal vorkommen, daß sich der eine oder andere Tippfehler einschleicht – mit dem Ergebnis, daß das Binding nicht wie gewünscht funktioniert. Simples Beispiel:

<Window x:Class="DataBinding.Window1"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:local="clr-namespace:DataBinding"
   Title="Binding error" Height="300" Width="300">

   <Window.Resources>
       <local:CompactDisc x:Key="myOneAndOnlyCD" Title="Images And Words" Artist="Dream Theater"/>
   </Window.Resources>

   <StackPanel>
       <TextBlock Text="{Binding Source={StaticResource myOneAndOnlyCD}, Path=Titel}"/>
       <TextBlock Text="{Binding Source={StaticResource myOneAndOnlyCD}, Path=Artist}"/>
   </StackPanel>
</Window>

 

CompactDisc ist die einfachste aller Klassen:

namespace DataBinding
{
   public class CompactDisc
   {
       public string Title { get; set; }
       public string Artist { get; set; }
   }
}

 

Wird dieser Code ausgeführt, wundert man sich, daß zwar der Künstlername angezeigt wird, aber der Titel nicht. Was ist passiert?

Hier kommt Snoop ins Spiel. Snoop ist eines der vielen kleinen Tools die dem WPF Entwickler das Leben leichter machen. Neben diversen anderen Features wie

  • den Visual Tree betrachten
  • Eigenschaften der Elemente im Visual Tree editieren
  • Routed Events verfolgen
  • Zoom der ausgewählten WPF Anwendung

kann das Tool auch Binding Fehler anzeigen.

Nach dem Start listet Snoop in einer Combobox alle WPF Applikationen auf, die momentan ausgeführt werden.

SnoopStartup

Man wählt die betreffende Applikation aus und mit einem Klick auf das Fernglas verbindet sich Snoop damit. Es öffnet sich ein weiteres Fenster in dem man sich den Details widmen kann:

 Snoop visual tree

Öffnet man nun die Combobox in der linken, oberen Ecke findet man den Eintrag “Visuals with binding errors”. Wählt man diesen aus, erhält man eine gefilterte Liste:

Snoop binding errors

In dem Properties Tab auf der rechten Seite wird nun die betroffene Eigenschaft rot eingefärbt. Ein Tooltip zeigt die komplette Fehlermeldung:

System.Windows.Data Error: 39 : BindingExpression path error: ‘Titel‘ property not found on ‘object’ ”CompactDisc’ (HashCode=33736294)’. BindingExpression:Path=Titel; DataItem=’CompactDisc’ (HashCode=33736294); target element is ‘TextBlock’ (Name=”); target property is ‘Text’ (type ‘String’)

Es hat sich also ein Tippfehler bei dem ersten Binding gegen die Eigenschaft “Title” eingeschlichen.

Ok, ok. Den Fehler sieht man auch sofort, wenn die Anwendung im Debugmodus aus dem Visual Studio gestartet wird. Dort wird der gleiche Fehlertext im Output Fenster angezeigt. Aber ich wollte halt meine Begeisterung über Snoop teilen…

Um auch komplizierteren Bindingproblemen auf die Spur zu kommen gibt es seit .Net 3.5 an der PresentationTraceSources Klasse die Attached Property TraceLevel. Bea Stollnitz zeigt hier wie man sie einsetzt (und gibt noch ein paar weitere Tipps zu Debugging von WPF Databinding).

Kick it on dotnet-kicks.de
Categories: Softwareentwicklung Tags: ,
  1. Timo Toivonen
    February 12th, 2009 at 12:49 | #1

    Vielen Dank für klar Erzählung. Ich habe gefunden das Snoop funktioniert nicht mit Windows XP (SP2).

    pom

    PS: Ja die genannt DreamTheater CD ist sehr gut! =)

  2. Bernd
    February 12th, 2009 at 14:05 | #2

    Danke für das Feedback. Bekommst Du eine Fehlermeldung? Ich hab Snoop mit Windows XP (SP3) probiert und hatte keine Probleme. Hast Du .Net Framework 3.5 installiert?

  3. July 30th, 2010 at 01:33 | #3

    Hallo,

    es gibt seit kurzen ein weiteres Tool, um eine laufende WPF Applikation zu inspizieren. Es heist WPF Inspector. Es bietet zudem die Möglichkeit Triggers zu debuggen.

    Ihr könnt es hier runterladen: http://www.wpftutorial.net/Inspector.html

    Gruss
    Christian

  4. Bernd
    July 30th, 2010 at 06:19 | #4

    Hallo Christian,
    danke für den Hinweis. Ich werd’s demnächst mal ausprobieren.
    Grüße,
    Bernd

  1. No trackbacks yet.
Comments are closed.