【问题标题】:How can I turn binding errors into runtime exceptions?如何将绑定错误转换为运行时异常?
【发布时间】:2011-05-12 16:05:30
【问题描述】:

正如在我们的项目中设置了“将警告视为错误”以尽早发现可能的问题,我希望有一个运行时异常来及早发现它们。

我最近被这个问题困扰,如果有这个问题我会很高兴的。

可以吗?如果是,如何?

【问题讨论】:

    标签: wpf debugging exception data-binding


    【解决方案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 提出的解决方案非常相似的解决方案:

    1. 派生了一个TraceListener,它抛出而不是记录
    2. 将该监听器添加到PresentationTraceSources.DataBindingSource

    请参阅complete solution on GitHub,它包括一个演示应用程序和一个单元测试项目。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-09
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多