如何将绑定错误转换为运行时异常?

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

以上是关于如何将绑定错误转换为运行时异常?的主要内容,如果未能解决你的问题,请参考以下文章

java之异常

Java异常如何解决

运行时异常:ClassCastException android.os.Bundle 无法转换为 Parcelable 类

运行时异常,递归太深

Java多态对象的类型转换和动态绑定

异常处理 — 运行时异常