如何将绑定错误转换为运行时异常?

And*_*nea 29 data-binding debugging wpf exception

就像在我们的项目中设置"将警告视为错误"以捕捉早期可能存在的问题一样,我希望有一个运行时异常来及早发现它们.

我最近有点担心这个问题,我很高兴能有这个问题.

可以吗?如果是,怎么样?

Dea*_*alk 42

您可以PresentationTraceSources使用自己的侦听器挂钩集合:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将其挂钩在代码隐藏中

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

这是带有绑定错误的XAML

    <Grid>
    <TextBlock Text="{Binding BadBinding}" />
</Grid>
Run Code Online (Sandbox Code Playgroud)


Ben*_*hon 12

我实施了一个非常类似于Dean Chalk提出的解决方案的解决方案:

  1. 派生出一个TraceListener抛出而不是记录
  2. 添加了该侦听器 PresentationTraceSources.DataBindingSource

请参阅GitHub上完整解决方案,它包括一个演示应用程序和一个单元测试项目.

Visual Studio中的异常