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

Я новичок в Silverlight и RIA. Однако мы разрабатываем приложение с внешним интерфейсом SL, использующим WCF/RIA для подключения к нашему сервисному уровню. Мы используем шаблон mvvm, так что это тоже может сыграть свою роль.

У меня есть конкретная форма данных, в которой я использую команду для перехвата события EditEnding формы данных. В EditEnding я вызываю свою службу, чтобы сохранить отредактированный объект. Служба выполняет тяжелую проверку объекта и в настоящее время выдает исключения, которые я перехватываю в своей модели представления и отображаю с помощью MessageBox.

Я хочу отображать эти исключения как ошибки проверки, а не отображать их с помощью окна сообщений. Я видел несколько статей, в которых говорится о новом INotifyDataErrorInfo SL4, и, возможно, это решение; но я немного смущен тем, как это на самом деле реализовано. Другое дело, что у меня сложилось впечатление, что INotifyDataErrorInfo используется для «немедленной» проверки свойства (одного свойства за раз), а не для проверки всего объекта на уровне службы, когда пользователь нажимает кнопку «Отправить». .

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

Может ли кто-нибудь пролить свет на то, как я могу это сделать?

Заранее спасибо!


person RHarris    schedule 01.07.2010    source источник


Ответы (2)


Не видя больше того, как ваша команда viewmodel взаимодействует с вашим бизнес-объектом и как вы хотите отображать ошибки, это мое предложение...

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

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

ХТН

person aqwert    schedule 01.07.2010
comment
Спасибо за ответ. Есть ли способ добавить эти исключения к ошибкам проверки, которые уже отображаются в форме данных... список ошибок проверки? - person RHarris; 01.07.2010

с ошибками INotifyDataerrors отображаются на экране, КОГДА ВЫ ХОТИТЕ. Это происходит, как только ваша модель Vie вызывает событие для уведомления интерфейса об обнаружении новых ошибок.

К сожалению, сервисы Rias реализуют INotifyDataErrors за вас, и они используют только ошибки, поступающие из аннотаций данных. Таким образом, если вы хотите использовать сервисы Ria, вам необходимо написать собственные аннотации данных для оценки всех ошибок. Существуют также аннотации данных на уровне класса. Вы можете проверить что угодно с помощью аннотаций данных. Более того, если вы не дадите расширение .share.cs для этих аннотаций данных, они будут использоваться только на стороне сервера, а не на клиенте... Для получения дополнительной информации, пожалуйста, прочитайте серию сообщений аннотаций данных на моем блог здесь. Если вы хотите использовать исключения, пожалуйста, используйте мой инструментарий проверки для WPF и Silverlight вместо сервиса Ria. Он доступен бесплатно на codeplex здесь.

person Francesco Abbruzzese    schedule 16.10.2010