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

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

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

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

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

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

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

这是我的TraceListener

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

TraceListener在System.Diagnostics中定义。

必须将自定义TraceListener挂接到要使用的系统中。 执行此操作的官方方法是在注册表中设置某些内容,然后使用App.config文件配置TraceListener

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

 ErrorLogTraceListener listener = new ErrorLogTraceListener(); PresentationTraceSources.Refresh(); PresentationTraceSources.DataBindingSource.Listeners.Add(listener); PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Error; 

PresentationTraceSources也在System.Diagnostics定义。

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

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

看一下这篇可能有助于解决这个问题的博客文章 。

我实施了一个非常类似于接受的答案的解决方案:

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

请参阅GitHub上的完整解决方案 ,它包括一个演示应用程序和一个unit testing项目。

Visual Studio中的异常

使用.net 4.0 Dynamics在WPF和Silverlight中引发绑定exception 。