如何将绑定错误转换为运行时异常?
Posted
技术标签:
【中文标题】如何将绑定错误转换为运行时异常?【英文标题】:How can I turn binding errors into runtime exceptions? 【发布时间】:2011-05-12 16:05:30 【问题描述】:正如在我们的项目中设置了“将警告视为错误”以尽早发现可能的问题,我希望有一个运行时异常来及早发现它们。
我最近被这个问题困扰,如果有这个问题我会很高兴的。
可以吗?如果是,如何?
【问题讨论】:
【参考方案1】:您可以使用自己的侦听器连接到 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>
【讨论】:
只有当我在 Visual Studio 中运行我的应用程序时才有效?当我将我的应用程序发布到共享并从那里运行 wpf exe 时怎么样?【参考方案2】:我实现了一个与 Dean Chalk 提出的解决方案非常相似的解决方案:
-
派生了一个
TraceListener
,它抛出而不是记录
将该监听器添加到PresentationTraceSources.DataBindingSource
请参阅complete solution on GitHub,它包括一个演示应用程序和一个单元测试项目。
【讨论】:
酷。你可以把它变成 NuGet 包。 读者可能会发现查看有关另一个问题的答案的附加信息很有用,Benoit 还发布了 this 答案***.com/a/55641847/5198140 我刚刚注意到 Benoit 似乎接受了 Robert 的建议,并将其放入 NuGet 包中,谢谢 Benoit...nuget.org/packages/WpfBindingErrors以上是关于如何将绑定错误转换为运行时异常?的主要内容,如果未能解决你的问题,请参考以下文章
运行时异常:ClassCastException android.os.Bundle 无法转换为 Parcelable 类