就像在我们的项目中设置“将警告视为错误”以捕捉早期可能的问题一样,我希望有一个运行时异常来及早发现它们。
我最近遇到过这个问题,我很乐意这样做。
可以吗?如果是的话,怎么样?
答案 0 :(得分:41)
您可以使用自己的监听器挂钩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>
答案 1 :(得分:12)
我实施的解决方案非常类似于Dean Chalk提出的解决方案:
TraceListener
投掷而不是记录PresentationTraceSources.DataBindingSource
请参阅complete solution on GitHub,其中包括演示应用程序和单元测试项目。