Как я могу превратить ошибки привязки в исключения во время выполнения? - PullRequest
29 голосов
/ 19 ноября 2010

Подобно тому, как в наших проектах установлены «обрабатывать предупреждение как ошибки» для выявления возможных ранних проблем, я бы хотел иметь исключение времени выполнения для раннего их обнаружения.и я был бы рад получить это.

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

Ответы [ 2 ]

42 голосов
/ 19 ноября 2010

Вы можете подключить коллекцию 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>
12 голосов
/ 26 октября 2013

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

  1. Получил TraceListener, который выбрасывает вместо записи
  2. Добавил этого слушателя в PresentationTraceSources.DataBindingSource

Смотрите полное решение на GitHub , оно включает в себя демонстрационное приложение и проект модульного тестирования.

Exception in Visual Studio

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...