WPF: Как показать сообщение об ошибке в пользовательском интерфейсе, генерируемом IValueConverter? - PullRequest
2 голосов
/ 27 августа 2011

Я реализовал тип CustomDoubleConverter, который реализует IValueConverter.Я включил его Converter={StaticResource customDoubleConverter} и соответствующий ресурс в xaml -файл.Работает нормально.

Вопрос об обработке ошибок.Я хотел бы проверить, если строка пользовательского интерфейса представляет правильный double.если нет, то показать одно из двух сообщений на метке в зависимости от недопустимого ввода: пустая строка или другая не двойная строка.

Какой подход следует использовать для отображения пользовательских сообщений об ошибках в форме пользовательского интерфейса, когда ошибка происходит во времяпреобразование типа из строки?

Я пытался сделать с помощью исключений, но получил необработанное исключение. Совет: не создавайте исключение в IValueConverter убедил меня больше не пытаться использовать исключения.

Мне удалось проверить дважды после конвертации с корректной обработкой интерфейса IDataErrorInfo в представлении модели MVVM.Но это можно сделать после успешного преобразования строки в двойное, что не соответствует описанному выше случаю.

У меня также есть ValidatesOnDataErrors="True" и ValidatesOnExceptions="True" для моего текстового поля.

Я использую подход MVVM для проектирования, если это полезно (аналогично описанному в WPF Apps WithШаблон проектирования Model-View-ViewModel ).

Короче:

Я хочу разобрать double с TextBox и показать одно из трех сообщений об ошибкахесли есть на метке пользовательского интерфейса:

  • пустая строка (упомянутая выше),
  • недопустимая двойная строка (упомянутая выше) и
  • отрицательное число (не упомянутая выше, но я обработал это через IDataErrorInfo - это не проблема).

1 Ответ

2 голосов
/ 27 августа 2011

Это строго зависит от вашего дизайна пользовательского интерфейса, или, другими словами, как вы будете сообщать о проблеме пользователю. Я бы сказал, использование Dependency Properties . Например.

Допустим, пользователь вставляет значение в TextBox. TextBox имеет свойство зависимости DataError string. Конвертер в случае сбоя просто устанавливает это свойство в соответствующую строку пользователя (может быть восстановлено из локализованного ресурса). Когда свойство установлено один раз, TextBox становится красным, очищает содержимое и печатает текст ошибки, сгенерированный конвертером.

Я имею в виду, что идея состоит в том, чтобы использовать Свойства зависимости , то, как он будет выглядеть в конечном интерфейсе, зависит от дизайна вашего приложения и вашего выбора.

Существует также еще одна связанная ссылка SO:

Как обработать исключение в конвертере значений, чтобы можно было отобразить пользовательское сообщение об ошибке

Надеюсь, это поможет.

...