How can I turn binding errors into runtime exceptions? How can I turn binding errors into runtime exceptions? wpf wpf

How can I turn binding errors into runtime exceptions?


You could hook into the PresentationTraceSources collection with your own listener:

public class BindingErrorListener : TraceListener{    private Action<string> logAction;    public static void Listen(Action<string> logAction)    {        PresentationTraceSources.DataBindingSource.Listeners            .Add(new BindingErrorListener() { logAction = logAction });    }    public override void Write(string message) { }    public override void WriteLine(string message)    {        logAction(message);    }}

and then hook it up in code-behind

public partial class MainWindow : Window{    public MainWindow()    {        BindingErrorListener.Listen(m => MessageBox.Show(m));        InitializeComponent();        DataContext = new string[] { "hello" };    }}

Here is the XAML with a binding error

    <Grid>    <TextBlock Text="{Binding BadBinding}" /></Grid>


I implemented a solution very similar to the one proposed by Dean Chalk:

  1. Derived a TraceListener that throws instead of logging
  2. Added that listener to PresentationTraceSources.DataBindingSource

Please see the complete solution on GitHub, it includes a demo application and a unit test project.

Exception in Visual Studio