WPF Binding Errors
I find the binding aspect of WPF to be very powerful. There's one part that I found challenging. If the binding wasn't just right, the problem wouldn't be obvious. If I make a typo when binding to a property, I like it to be painfully obvious. So, the project now displays a message box if there was a binding issue.
The BindingErrorTraceListener class watches for any trace messages that meet my binding error criteria and displays a message box.
public class BindingErrorTraceListener : DefaultTraceListener
{
public static void AddDefaultTrace()
{
AddTrace(SourceLevels.Error, TraceOptions.None);
}
public static void AddTrace(SourceLevels level, TraceOptions options)
{
var listener = new BindingErrorTraceListener {TraceOutputOptions = options};
PresentationTraceSources.DataBindingSource.Listeners.Add(listener);
PresentationTraceSources.DataBindingSource.Switch.Level = level;
}
public override void WriteLine(string message)
{
base.WriteLine(message);
if (message == null) return;
if (!message.StartsWith("BindingExpression path error")) return;
MessageBox.Show(message, "Binding Error", MessageBoxButton.OK,
MessageBoxImage.Error);
}
}
When we enter the window, we have to add our listener. BindingErrorTraceListener.AddDefaultTrace(); For testing purposes, I added a label that points to a nonexistent property on the view model.
<Label Content="{Binding MainLabel}" />
public class LandingPageViewModel
{
}
Once everything is connected, an invalid binding will be very obvious because a message like this will appear.