Как распространять ошибки и исключения, возникающие при привязке данных WPF? - PullRequest
9 голосов
/ 22 апреля 2009

Время от времени я обнаруживаю, что в моем приложении случайно нарушена привязка данных. Либо переименовывая свойство, но не переименовывая его в XAML, либо вызывая исключение по какой-либо причине.

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

Есть ли простой способ вызвать исключение после регистрации результатов отладки?

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

Ответы [ 4 ]

11 голосов
/ 11 мая 2009

После некоторого промедления я наконец приступил к написанию решения моей первоначальной проблемы.

Мое решение использует пользовательский TraceListener (первоначально предложенный Джоном), который регистрирует в окне вывода. Окно вывода автоматически отображается и покупается на переднем плане при возникновении ошибки.

Вот мой TraceListener:

public class ErrorLogTraceListener : TraceListener
{
    public override void Write(string message)
    {
        ...
    }

    public override void WriteLine(string message)
    {
        ...
    }
}

TraceListener определено в System.Diagnostics.

Пользовательский TraceListener должен быть подключен к используемой системе. Официальный способ сделать это - установить что-то в реестре, а затем использовать файл App.config для настройки TraceListener.

Однако я обнаружил, что есть намного более простой способ сделать это программно:

ErrorLogTraceListener listener = new ErrorLogTraceListener();
PresentationTraceSources.Refresh();

PresentationTraceSources.DataBindingSource.Listeners.Add(listener);
PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Error;

PresentationTraceSources также определено в System.Diagnostics.

Для получения дополнительной информации об источниках трассировки см. Блог Майка Хилберга .

.

У Bea Stollnitz есть некоторая полезная информация о ее блоге .

2 голосов
/ 22 апреля 2009

Просмотрите эту статью блога , которая может помочь обойти эту проблему.

0 голосов
/ 26 октября 2013

Я реализовал решение, очень похожее на принятый ответ:

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

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

Exception in Visual Studio

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