代码之家  ›  专栏  ›  技术社区  ›  Ashley Davis

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

  •  9
  • Ashley Davis  · 技术社区  · 15 年前

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

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

    在记录调试输出之后,是否有一种简单的方法引发异常?

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

    4 回复  |  直到 8 年前
        1
  •  11
  •   STiLeTT Quartermeister    9 年前

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

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

    这是我的 示踪物 :

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

    示踪物 在System.Diagnostics中定义。

    习俗 示踪物 必须连接到要使用的系统中。正式的方法是在注册表中设置一些内容,然后使用 App.config 要配置的文件 示踪物 .

    然而,我发现有一种更简单的方法可以通过编程实现这一点:

    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 .

        2
  •  2
  •   Ryan_S    8 年前

    看一看 this blog article 这可能有助于解决这个问题。

        3
  •  0
  •   Benoit Blanchon    11 年前

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

    1. 导出A TraceListener 它抛出而不是记录
    2. 将该侦听器添加到 PresentationTraceSources.DataBindingSource

    请看 complete solution on GitHub 它包括一个演示应用程序和一个单元测试项目。

    Exception in Visual Studio