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

问题描述 投票:0回答:4

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

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

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

我想尽快知道数据绑定是否被破坏(最好是在自动化测试中发现它),并且不要冒着在经过人工测试之前可能被忽视的风险。

c# wpf data-binding xaml
4个回答
12
投票

经过一番拖延,我终于开始为我最初的问题编写一个解决方案。

我的解决方案使用自定义的

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 在她的博客上有一些有用的信息。


2
投票

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


0
投票

我实现了一个与已接受的答案非常相似的解决方案:

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

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

Exception in Visual Studio


© www.soinside.com 2019 - 2024. All rights reserved.