Search code examples
c#validationdevexpressdevexpress-windows-ui

Use DXValidationProvider to validate value against collection of values


I want to use DXValidationProvider to check if Item's name inside TextEdit is unique. I've got collection of Item objects available.

Pseudo code for Item class:

class Item {
    public string Name {get;set;}
    // ...
}

First I create ConditionValidationRule:

List<Item> MyItems;
// .... MyItems is filled somewhere there. Its size is >0 for sure (checked with debugger).
// Binding works for sure too.
ConditionValidationRule uniqueItemNameRule = new ConditionValidationRule();
uniqueItemNameRule.CaseSensitive = false;
uniqueItemNameRule.ConditionOperator = ConditionOperator.NotAnyOf;
uniqueItemNameRule.ErrorText = "Name must be unique";
uniqueItemNameRule.ErrorType = ErrorType.Critical;
uniqueItemNameRule.Value1 = MyItems.Select(x => x.Name).ToList();
validationProvider.SetValidationRule(teName, uniqueItemNameRule);

However when I set Item's name which is not unique, validation passes anyway. I did not forget to perform the validation since other rules works as intended. DevExpress lacks documentation on validation rules so can't really have reading there.


Solution

  • For ConditionOperator.NotAnyOf you must use ConditionValidationRule.Values property instead of ConditionValidationRule.Value1 property.
    Here is example:

    uniqueItemNameRule.Values.AddRange(MyItems.Select(x => x.Name).ToList());