代码之家  ›  专栏  ›  技术社区  ›  Andrei Rînea

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

  •  28
  • Andrei Rînea  · 技术社区  · 14 年前

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

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

    能做到吗?如果是,怎么办?

    2 回复  |  直到 10 年前
        1
  •  41
  •   Crono    10 年前

    你可以用钩子钩住 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>
    
        2
  •  12
  •   Benoit Blanchon    11 年前

    我实施了一个非常类似于Dean Chalk提出的解决方案:

    1. 派生a TraceListener 它抛出而不是记录
    2. 将该侦听器添加到 PresentationTraceSources.DataBindingSource

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

    Exception in Visual Studio

    推荐文章