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

时间:2010-11-19 14:20:40

标签: wpf debugging exception data-binding

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

我最近遇到过这个问题,我很乐意这样做。

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

2 个答案:

答案 0 :(得分:41)

您可以使用自己的监听器挂钩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);
    }
}

然后将其挂钩在代码隐藏

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

这是带有绑定错误的XAML

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

答案 1 :(得分:12)

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

  1. 派生TraceListener投掷而不是记录
  2. 将该监听器添加到PresentationTraceSources.DataBindingSource
  3. 请参阅complete solution on GitHub,其中包括演示应用程序和单元测试项目。

    Exception in Visual Studio