使用 DXValidationProvider 根据值集合验证值
Use DXValidationProvider to validate value against collection of values
我想用 DXValidationProvider
检查 Item
在 TextEdit
中的名字是否唯一。我收集了 Item
个对象。
项目class的伪代码:
class Item {
public string Name {get;set;}
// ...
}
首先我创建 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);
但是,当我设置的项目名称不是唯一的时,验证还是通过了。我没有忘记执行验证,因为其他规则按预期工作。 DevExpress 缺少有关验证规则的文档,因此无法在那里阅读。
对于 ConditionOperator.NotAnyOf
你必须使用 ConditionValidationRule.Values
属性 而不是 ConditionValidationRule.Value1
属性.
这是示例:
uniqueItemNameRule.Values.AddRange(MyItems.Select(x => x.Name).ToList());
我想用 DXValidationProvider
检查 Item
在 TextEdit
中的名字是否唯一。我收集了 Item
个对象。
项目class的伪代码:
class Item {
public string Name {get;set;}
// ...
}
首先我创建 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);
但是,当我设置的项目名称不是唯一的时,验证还是通过了。我没有忘记执行验证,因为其他规则按预期工作。 DevExpress 缺少有关验证规则的文档,因此无法在那里阅读。
对于 ConditionOperator.NotAnyOf
你必须使用 ConditionValidationRule.Values
属性 而不是 ConditionValidationRule.Value1
属性.
这是示例:
uniqueItemNameRule.Values.AddRange(MyItems.Select(x => x.Name).ToList());