Подтвердить что ты не робот

Как включить ошибки привязки в исключения во время выполнения?

Так же, как в наших проектах есть "предупреждать об ошибках", чтобы поймать ранние возможные проблемы, я хотел бы иметь исключение во время выполнения, чтобы ловить их раньше.

Недавно я был немного обеспокоен этой проблемой, и я был бы рад этому.

Можно ли это сделать? И если да, то как?

4b9b3361

Ответ 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>

Ответ 2

Я реализовал решение, очень похожее на решение, предложенное Дином Мелом:

  • Производится a TraceListener, который генерирует вместо ведения журнала
  • Добавил, что прослушиватель PresentationTraceSources.DataBindingSource

Пожалуйста, см. полное решение на GitHub, оно включает демонстрационное приложение и проект unit test.

Exception in Visual Studio