为什么WPF数据绑定会吞下exception?

我最近浪费了大量时间尝试调试WPF数据网格(来自WPF工具包)。 我有一个绑定到linq查询的列,其中包含抛出exception的属性(在几行中)。 WPF似乎捕获了exception,它只是使单元格为空。 我已修复导致exception的错误,但我想改变WPF的行为。 我一直想知道是不是有问题。 为什么吞下exception是默认行为,如何更改?

数据绑定错误本身被吞下,但它们显示在visual studio界面的OUTPUT对话框中。 如果您希望得到通知(并尽可能多地控制它),那么您可以使用跟踪源。

Bea Stollnitz在这里提供了一个很好的关于此的文章(以及一般的调试): http : //www.beacosta.com/blog/? p = 52

显然,这个博客已经离开,但我们确实有WayBack机器: http ://web.archive.org/web/20091103200557/http: //www.beacosta.com/blog/? p = 52

我还将它添加到我的Coding笔记本中,用于Evernote: https ://www.evernote.com/pub/view/sswrighton/coding/f9786746-94c3-41b5-bcd2-c12992d331a6 ? locale = en#st = p &n=f9786746-94c3 -41b5-BCD2-c12992d331a6

这是我的最爱 。 它可以在不更改app.config的情况下工作

如果您想为其设置validation,可以添加ExceptionValidationRule

http://msdn.microsoft.com/en-us/library/system.windows.controls.exceptionvalidationrule.aspx

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

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

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

Visual Studio中的异常

在调试器中启用First Chance Exceptions(Debug – > Exceptions)也会对此有所帮助,尽管它会让人烦恼