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