如何传播WPF数据绑定期间发生的错误和异常?

Ash*_*vis 9 c# data-binding wpf xaml

我经常发现我在应用程序中意外破坏了数据绑定.通过重命名属性而不是在XAML中重命名属性,或者由于某种原因抛出异常的属性.

默认情况下,数据绑定错误会记录到调试输出中,并且会捕获并抑制抛出的异常.

是否有一种简单的方法可以在记录调试输出后抛出异常?

我想尽快知道数据绑定是否被破坏(理想情况下是在自动化测试中取出),并且不会冒险在人类测试之前可能会被忽视的可能性.

Ash*_*vis 11

经过一些拖延后,我终于着手为我原来的问题编写解决方案.

我的解决方案使用自定义TraceListener(最初由John建议)记录到输出窗口.发生错误时,输出窗口会自动显示并购买到前台.

这是我的TraceListener:

public class ErrorLogTraceListener : TraceListener
{
    public override void Write(string message)
    {
        ...
    }

    public override void WriteLine(string message)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

TraceListener 在System.Diagnostics中定义.

TraceListener必须将自定义连接到要使用的系统中.这样做的官方方法是在注册表中设置一些内容然后使用该App.config文件来配置TraceListener.

但是我发现有一种更简单的方法可以以编程方式执行此操作:

ErrorLogTraceListener listener = new ErrorLogTraceListener();
PresentationTraceSources.Refresh();

PresentationTraceSources.DataBindingSource.Listeners.Add(listener);
PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Error;
Run Code Online (Sandbox Code Playgroud)

PresentationTraceSources也定义于System.Diagnostics.

有关跟踪源的更多信息,请参阅Mike Hillberg的博客.

Bea Stollnitz在她的博客上有一些有用的信息.

  • 完整的例子:http://www.jasonbock.net/jb/Default.aspx?blog = entry.0f221e047de740ee90722b248933a28d (2认同)