如何在Entry初始化内访问MultiValidationBehavior的验证状态?
问题解答
可以访问这个初始化时创建的验证器来检查状态,以下是几种可行的操作方式:
方法1:遍历Behaviors集合筛选
验证器已经被添加到myEntry.Behaviors集合中,直接遍历集合找到MultiValidationBehavior类型的实例即可:
// 从Behaviors里筛选出目标验证器 var targetValidator = myEntry.Behaviors.FirstOrDefault(b => b is MultiValidationBehavior) as MultiValidationBehavior; if (targetValidator != null) { // 读取验证状态 bool isEntryValid = targetValidator.IsValid; }
方法2:初始化时提前捕获引用
在Entry的初始化代码里,先把验证器赋值给一个可访问的变量,再添加到Behaviors中,这样既能保持初始化写法,又能直接拿到引用:
// 先声明变量(可以是局部变量或类字段) MultiValidationBehavior myValidator; Entry myEntry = new Entry { Text = "string", Behaviors = { // 把创建的验证器赋值给变量 myValidator = new MultiValidationBehavior { InvalidStyle = invalidEntryStyle, Flags = ValidationFlags.ValidateOnValueChanging, Children = { new TextValidationBehavior { MinimumLength = 5 }, new CharactersValidationBehavior { CharacterType = CharacterType.Digit, MaximumCharacterCount = 0 } } } } }; // 直接使用变量访问验证状态 bool isEntryValid = myValidator.IsValid;
方法3:通过Name属性定位
如果存在多个同类型行为,可以给验证器设置唯一的Name属性,之后通过Name精准查找:
Entry myEntry = new Entry { Text = "string", Behaviors = { new MultiValidationBehavior { Name = "UserInputValidator", // 设置唯一标识 InvalidStyle = invalidEntryStyle, Flags = ValidationFlags.ValidateOnValueChanging, Children = { new TextValidationBehavior { MinimumLength = 5 }, new CharactersValidationBehavior { CharacterType = CharacterType.Digit, MaximumCharacterCount = 0 } } } } }; // 根据Name筛选目标验证器 var targetValidator = myEntry.Behaviors.FirstOrDefault(b => b is MultiValidationBehavior mv && mv.Name == "UserInputValidator") as MultiValidationBehavior; if (targetValidator != null) { bool isEntryValid = targetValidator.IsValid; }
内容的提问来源于stack exchange,提问作者Costas
相关产品推荐
相关产品推荐

