Поддержка валидации XAF в DynamicPropertiesObject
При необходимости, к объектам типа DynamicPropertiesObject можно применять механизм валидации. Для этого в Динамическом Реквизите, подлежащем проверке, должны присутствовать специальные аттрибуты-правила, наследники RuleBaseAttribute.
public class DynamicPropertiesValidationSupport : BaseObject
{
public DynamicPropertiesValidationSupport(Session session) : base(session){}
public CreateDynamicObjectWithValidationRule()
{
var dpl = new DynamicPropertyList();
var rule = new List<Attribute>();
//Add validation rule to list of attributes
rule.Add(new RuleRequiredFieldAttribute());
//Add new Dynamic Property to list
dpl.Add(new DynamicProperty("RuleRequiredField", typeof (string), "1", true,
/*rule contains added validation rule*/ rule));
//Create dynamic object, pass Dynamic properties collection
this.Dpo = DynamicPropertiesObject.CreateObject<DynamicPropertiesObject>(dpl);
}
public DynamicPropertiesObject Dpo { get; private set; }
}
Таким образом, при создании Динамического Реквизита достаточно задать параметрах конструктора, следует указать такую коллекцию IDynamicProperty.Attributes, которая будет содержать атрибуты валидации. Никаких дополнительных манипуляций для инициализации Динамических Реквизитов делать не нужно. Если стандартные Actions валидации по каким-то причинам не активны, то для проверки валидности объекта достаточно воспользоваться одним из методов валидации класса DevExpress.Persistent.Validation.RuleSet. Чтобы получить доступ к классу RuleSet воспользуйтесь статическим свойством класса DevExpress.Persistent.Validation.Validator. Нижеприведенный фрагмент кода демонстрирует, как вызвать RuleSet.Validate для объекта Dpo:
Validator.RuleSet.Validate(this.ObjectSpace, obj.Dpo, ContextIdentifier.Save);
obj представляет DynamicPropertiesValidationSupport, а Dpo - DynamicPropertiesObject.