【发布时间】:2011-05-12 16:05:30
【问题描述】:
正如在我们的项目中设置了“将警告视为错误”以尽早发现可能的问题,我希望有一个运行时异常来及早发现它们。
我最近被这个问题困扰,如果有这个问题我会很高兴的。
可以吗?如果是,如何?
【问题讨论】:
标签: wpf debugging exception data-binding
正如在我们的项目中设置了“将警告视为错误”以尽早发现可能的问题,我希望有一个运行时异常来及早发现它们。
我最近被这个问题困扰,如果有这个问题我会很高兴的。
可以吗?如果是,如何?
【问题讨论】:
标签: wpf debugging exception data-binding
您可以使用自己的侦听器连接到 PresentationTraceSources 集合:
public class BindingErrorListener : TraceListener
{
private Action<string> logAction;
public static void Listen(Action<string> logAction)
{
PresentationTraceSources.DataBindingSource.Listeners
.Add(new BindingErrorListener() { logAction = logAction });
}
public override void Write(string message) { }
public override void WriteLine(string message)
{
logAction(message);
}
}
然后在代码隐藏中连接它
public partial class MainWindow : Window
{
public MainWindow()
{
BindingErrorListener.Listen(m => MessageBox.Show(m));
InitializeComponent();
DataContext = new string[] { "hello" };
}
}
这是带有绑定错误的 XAML
<Grid>
<TextBlock Text="{Binding BadBinding}" />
</Grid>
【讨论】:
我实现了一个与 Dean Chalk 提出的解决方案非常相似的解决方案:
TraceListener,它抛出而不是记录PresentationTraceSources.DataBindingSource
请参阅complete solution on GitHub,它包括一个演示应用程序和一个单元测试项目。
【讨论】: