17

I am having a data binding problem (a separate question), and normally when I code, I can use the debugger to step through, and hit break points. What is probably a simple issue has taken me all day, with no resolution (getting very frustrated now), because I do not know how to "run the debugger" on my XAML data bindings.

If anyone could explain how to do this, it would be greatly appreciated.

Sako73
  • 9,957
  • 13
  • 57
  • 75

4 Answers4

15

I have no idea if VS provides an easy way to debug bindings, but I usually use Snoop for debugging bindings

It's a tool that will go through a WPF application and give you a TreeView of the application's Visual Tree. You can select an element to view its DataContext and other properties. If there are any binding errors, the property is usually highlighted and it will say what the error was. If the binding is failing because the property doesn't exist, I can usually trace the DataContext and figure out where I went wrong in my binding.

John Cummings
  • 1,949
  • 3
  • 22
  • 38
Rachel
  • 130,264
  • 66
  • 304
  • 490
  • 2
    Snoop has been a godsend for me with all the little nuances of databinding in WPF. – Tim Nov 10 '11 at 22:25
  • 2
    Sigh... been suffering these silent failures for months. Finally found something that makes them slightly louder. – Roman Starkov Mar 27 '12 at 00:04
8

add a dummy converter

<local:DebuggerConverter x:Key="DebuggerConverter" />

<TextBlock Text={Binding ToSomething, Converter={StaticResource DebuggerConverter}} />

the converter

public class DebuggerConverter : IValueConverter
{
  #region IValueConverter Members

  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    // Set breakpoint here
    return value;
  }

  public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    // Set breakpoint here
    return value;
  }

  #endregion
}

or use this and look at your output window

<Window xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase">
  <TextBlock Text="{Binding ToSomething, diagnostics:PresentationTraceSources.TraceLevel=High}" />
</Window>

hope this helps

Val
  • 21,938
  • 10
  • 68
  • 86
punker76
  • 14,326
  • 5
  • 58
  • 96
2

You can get some basic information about binding errors in the Output Window in Visual Studio. It will show the binding expression path error and the line on which the error occured.

Ryan Spears
  • 2,963
  • 2
  • 31
  • 39
1

Add a dummy value converter to your binding. Put a breakpoint inside the value converter. Also check debug output window in Visual Studio for any binding errors.

Wallstreet Programmer
  • 9,567
  • 3
  • 37
  • 52