Вопрос о самооценке Enterprise Library 4.0 ValidationProvider

Я впервые использую элемент Validationprovider. У меня был ограниченный успех, пытаясь имитировать функциональность, которую я видел в примере решения ValidationQuickStart, которое поставляется с установкой Ent Lib.

Хотя мне удалось получить значки формы errorprovider на основе проверок бизнес-объектов, которые украшают свойство BO атрибутом проверки, например:

<NotNullValidator(MessageTemplate:="Gender must be specified.", RuleSet:="MyRule", Tag:="Gender")> _
      Public Shadows Property Gender() As String
        Get
            Return MyBase.Gender
        End Get
        Set(ByVal value As String)
            MyBase.Gender = value
        End Set
    End Property

Однако, если бы я хотел внести правку в метод «SelfValidation», как бы привязать Результат к элементу управления формы?

(In Self Validation)

If Me.Attornet s Nothing Then
    Dim result As New ValidationResult("Attorney selection is required", Me, Nothing, Nothing, Nothing)
    results.AddResult(result)
End If

Или я должен создать собственный ** CUSTOM VALIDATOR? », А затем использовать его тип для украшения свойства бизнес-объекта?

Изменить:

Если элемент управления ValidationProvider не предназначен для перекрестной проверки, как этот:

если пользователь выбирает вариант «Да» в группе переключателей, соответствующей свойству Business Option Customer.DoYouSmokeCrack As Boolean, то элемент управления txtHowMuch должен быть отмечен значком ErrorProvider, указывающим, что это поле является условным обязательным.

Сейчас я делаю это в блоке Self Validation, и когда я добавляю объект ValidationResult в коллекцию, я устанавливаю для свойства Key значение «Explanation», чтобы графический интерфейс мог использовать его для ручного сопоставления с проблемным экраном. контроль.

Есть ли более стандартный / лучший способ сделать это?


person Chad    schedule 19.04.2011    source источник


Ответы (1)


Вы не можете использовать самопроверку (или любую другую проверку перекрестных свойств) с использованием ValidationProvider. Это не сработает, потому что ValidationProvider работает без бизнес-объекта. Он загружает все проверки, определенные для одного свойства, и проверяет значение данного элемента управления, используя эти проверки.

Проверки перекрестных свойств, такие как пользовательские валидаторы и самопроверка, требуют для работы полностью инициализированного бизнес-объекта.

Если проверка проста и проверяет одно свойство (без каких-либо дополнительных действий, таких как переход к базе данных и т. Д.), Вы можете написать настраиваемый атрибут проверки для выполнения проверки. Во всех остальных случаях вам следует создать бизнес-объект после того, как пользователь нажмет «Сохранить» (что вы, вероятно, будете делать в любом случае), и проверить объект на этом этапе. Другими словами, вы откладываете проверку до тех пор, пока пользователь не зафиксирует свои изменения.

person Steven    schedule 19.04.2011