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

时间:2009-04-22 08:25:59

标签: c# wpf data-binding xaml

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

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

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

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

4 个答案:

答案 0 :(得分:11)

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

我的解决方案使用自定义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的blog

Bea Stollnitz对她blog提供了一些有用的信息。

答案 1 :(得分:2)

请查看this blog article,这可能有助于解决此问题。

答案 2 :(得分:0)

答案 3 :(得分:0)

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

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

    Exception in Visual Studio