Обрабатывать исключения с помощью WPF и MVVM - PullRequest
3 голосов
/ 09 октября 2009

Я пытаюсь создать приложение, используя WPF и шаблон MVVM. Мои представления заполняются из моей ViewModel исключительно через привязку данных. Я хочу иметь центральное место для обработки всех исключений, которые происходят в моем приложении, чтобы я мог уведомить пользователя и зарегистрировать ошибку соответствующим образом.

Я знаю о Dispatcher.UnhandledException, но это не делает работу, так как исключения, возникающие во время привязки данных, регистрируются в окнах вывода. Поскольку мой View связан с моей ViewModel, все приложение в значительной степени контролируется с помощью привязки данных, поэтому я не могу регистрировать свои ошибки.

Есть ли способ общей обработки исключений, возникающих при привязке данных, без необходимости помещать блоки try вокруг всей моей общедоступной ViewModel?

Пример просмотра:

<Window x:Class="Test.TestView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="TestView" Height="600" Width="800" 
    WindowStartupLocation="CenterScreen">
    <Window.Resources>
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
    </Window.Resources>
    <StackPanel VerticalAlignment="Center">
        <Label Visibility="{Binding DisplayLabel, Converter={StaticResource BooleanToVisibilityConverter}}">My Label</Label>
    </StackPanel>
</Window>

ViewModel:

public class TestViewModel
{
    public bool DisplayLabel
    {
        get { throw new NotImplementedException(); }
    }
}

Это внутреннее приложение, поэтому я не хочу использовать Wer, как я видел ранее рекомендованным.

1 Ответ

2 голосов
/ 10 октября 2009

Реализация Binding разработана для обеспечения отказоустойчивости и поэтому улавливает все исключения. Что вы можете сделать, это активировать следующие свойства в ваших привязках:

  • ValidatesOnExceptions = true
  • NotifyOnValidationError = true

См. Также MSDN .

Это вызывает повышение вложенного свойства Error в связанном элементе управления.

Однако эта инфраструктура предназначена для проверки ввода пользователя и отображения сообщений проверки. Я не уверен, что вы этим занимаетесь.

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