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

C# 如何传播错误&;WPF数据绑定期间发生的异常?,c#,wpf,data-binding,xaml,C#,Wpf,Data Binding,Xaml,我经常会发现我不小心破坏了应用程序中的数据绑定。通过重命名属性而不在XAML中重命名它,或者通过属性出于某种原因引发异常 默认情况下,将数据绑定错误记录到调试输出中,并捕获和抑制抛出的异常 有没有一种简单的方法可以在记录调试输出后引发异常 我想尽快知道数据绑定是否被破坏(最好是在自动测试中获取),并且在经过人工测试之前不要冒被忽略的风险。看看哪些方法可能有助于解决这个问题。经过一些拖延之后,我终于开始为我的原始问题编写解决方案 我的解决方案使用一个定制的TraceListener(最初由John

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

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

有没有一种简单的方法可以在记录调试输出后引发异常


我想尽快知道数据绑定是否被破坏(最好是在自动测试中获取),并且在经过人工测试之前不要冒被忽略的风险。

看看哪些方法可能有助于解决这个问题。

经过一些拖延之后,我终于开始为我的原始问题编写解决方案

我的解决方案使用一个定制的
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有一些关于她的有用信息。

我实施了一个与公认答案非常相似的解决方案:

  • 派生了一个
    TraceListener
    ,它抛出而不是记录
  • 将该侦听器添加到
    PresentationOnTraceSources.DataBindingSource
  • 请参阅,它包括一个演示应用程序和一个单元测试项目


    这是一篇关于调试数据绑定问题的好文章。但这取决于你一开始就发现了问题,对吗?这不是我想要的答案。我想要的(如果可能的话)是一个如何让数据绑定问题更突出的简明描述。您可以创建一个抛出异常的自定义跟踪侦听器。我发现这只会在附加调试器时捕获错误。如果未附加调试器,则WPF首先不会发出错误。。(?)。使用
    System.Diagnostics.Trace.AutoFlush=true修复了我们的问题。举个完整的例子:请注意,调用Refresh()会删除默认侦听器(如果app.config中未明确定义)。几个月后回到项目中,当我在输出窗口中没有看到任何绑定错误时,我对此感到困惑。