How can I turn binding errors into runtime exceptions?

前端 未结 2 1969
死守一世寂寞
死守一世寂寞 2020-11-28 07:29

Just as there is \"treat warning as errors\" set in our projects to catch early possible problems, I would love to have a runtime exception to catch them early.

I ha

相关标签:
2条回答
  • 2020-11-28 07:44

    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

    0 讨论(0)
  • 2020-11-28 07:56

    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>
    
    0 讨论(0)
提交回复
热议问题