RequiredStringValidationBehavior始终无效,输入匹配文本仍验证失败求排查
问题根源
你这段代码的核心问题是**RequiredString只获取了第二个Entry的初始文本值,没有和它的Text属性建立动态绑定**。
在初始化RequiredStringValidationBehavior时,你直接赋值了myLayout.Children.OfType<Entry>().ElementAt(1).Text,这只会取到该Entry在此时的文本(初始为空字符串)。后续你在第二个Entry中输入内容时,RequiredString的值不会自动更新,始终保持初始的空值。所以第三个Entry无论输入什么,都会和空值对比,自然判定为无效。
修复方案
需要将RequiredString与第二个Entry的Text属性建立动态绑定,这样当第二个Entry的文本变化时,RequiredString会同步更新。
修改后的代码示例:
StackLayout myLayout = new StackLayout { Children = { new Entry(), // 先获取第二个Entry的引用 new Entry(), new Entry() } }; var referenceEntry = myLayout.Children.OfType<Entry>().ElementAt(1); var targetEntry = myLayout.Children.OfType<Entry>().ElementAt(2); targetEntry.Behaviors.Add ( new RequiredStringValidationBehavior { // 使用绑定关联到第二个Entry的Text属性 RequiredString = new Binding(nameof(Entry.Text), source: referenceEntry), InvalidStyle = invalidEntryStyle, Flags = ValidationFlags.ValidateOnValueChanging } );
这样设置后,第二个Entry的文本变化会实时同步到RequiredString中,第三个Entry输入的内容就能和它正确对比,验证行为会正常工作。
内容的提问来源于stack exchange,提问作者Costas
相关产品推荐
相关产品推荐

