我想将DataBinding错误记录到文件中。 我使用了这个被接受的anwser中提出的解决方案:
How can I turn binding errors into runtime exceptions?
我也试过这个:http://msdn.microsoft.com/en-us/library/system.diagnostics.presentationtracesources.aspx
问题是它只能在VS IDE中运行时才能运行。当我发布应用程序时,错误不是警告。
是否有人知道如何在运行时以编程方式获取WPF Bindind错误并将其保存到已发布应用程序的文件中?
答案 0 :(得分:4)
我使用了与您提供的第一个链接中描述的技术类似的技术。可以通过以下步骤恢复:
TraceListener
而不是记录PresentationTraceSources.DataBindingSource
我使用.NET Framework 4.0,4.5和4.5.1进行了测试;它适用于Debug
和Release
配置。
请检查complete solution I pushed on GitHub,它包括演示应用程序和单元测试项目。
答案 1 :(得分:1)
我参加聚会的时间不算太晚,但是最近我遇到了同样的问题,并且对.NET来源进行了一些研究。
所以问题在于,仅在满足以下条件之一时才启用跟踪
AvTrace.cs:
private static bool ShouldCreateTraceSources()
{
return AvTrace.IsWpfTracingEnabledInRegistry() || AvTrace.IsDebuggerAttached() || AvTrace._hasBeenRefreshed;
}
因此,仅在以下情况下才会报告绑定错误:
在注册表(HKCU\Software\Microsoft\Tracing\WPF\ManagedTracing
)中启用了WPF跟踪
已附加调试器(应用程序是在Debug还是Release模式下编译都没有关系)
跟踪源已刷新
最后一个是棘手的-使用以下手动更新跟踪源时会刷新跟踪源:
PresentationTraceSources.DataBindingSource
这就是为什么它可以在Benoit Blanchon提供的解决方案中起作用的原因
,但是当您直接在app.config文件中定义跟踪源时,它将不起作用。 如果要创建跟踪源,则需要手动调用:
PresentationTraceSources.Refresh();
这将重新读取app.config,但还将调用内部AvTrace.OnRefresh()
,它将更改_hasBeenRefreshed
标志并启用跟踪。