c# – WPF DataBinding验证被忽略
发布时间:2020-12-16 01:37:07 所属栏目:百科 来源:网络整理
导读:我(相信)我正在以教科书的方式连接数据绑定验证,但它根本不起作用. 在调试器中,永远不会调用Validate(对象值,CultureInfo cultureInfo)方法. 是什么赋予了?此外,对于奖励积分,调试WPF的任何指针都会很棒. 我发布了我的XAML和有问题的课程 UserControl x:Cla
我(相信)我正在以教科书的方式连接数据绑定验证,但它根本不起作用.
在调试器中,永远不会调用Validate(对象值,CultureInfo cultureInfo)方法. 是什么赋予了?此外,对于奖励积分,调试WPF的任何指针都会很棒. 我发布了我的XAML和有问题的课程 <UserControl x:Class="FooControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:Foo.Controls" mc:Ignorable="d" d:DesignWidth="300"> <Grid Name="GridFoo"> <Grid.Resources> <local:ValueConverter x:Key="MyConverter" /> </Grid.Resources> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <TextBox Name="TextBoxScalar" Grid.Column="0" TextAlignment="Right"> <TextBox.Text> <Binding Mode="OneWay" Path="Scalar" NotifyOnValidationError="True" ValidatesOnDataErrors="True" ValidatesOnExceptions="True"> <Binding.ValidationRules> <local:ScalarValidationRule /> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> <TextBlock Name="TextBlockUnit" Grid.Column="1" TextAlignment="Left" Padding="3"> <Hyperlink> <!-- Use a custom converter here b/c generics break wpf... --> <Run Text="{Binding Mode=OneWay,Path=Unit,Converter={StaticResource MyConverter}}" /> </Hyperlink> </TextBlock> </Grid> 有效性规则 public class ScalarValidationRule : ValidationRule { public override ValidationResult Validate(object value,CultureInfo cultureInfo) { string number = value as string; double d; return new ValidationResult(Double.TryParse(number,NumberStyles.Any,cultureInfo,out d),String.Format(""{0}" is not a number.",number)); } } 解决方法
您正在将ValidationRule添加到单向绑定中.单向绑定永远不会将值推送到源,因此无需验证任何内容,并且永远不会调用ValidationRule.如果要验证用户输入的数据,请在绑定上设置Mode =“TwoWay”.您还可以完全省略Mode属性,因为TextBox.Text默认绑定为双向.
如果您确实需要单向绑定,并且希望在将值从源(Scalar)推送到目标(TextBox.Text)时进行验证,则在ValidationRule上将ValidatesOnTargetUpdated设置为True.您可以在XAML中或在ValidationRule类的构造函数中执行此操作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |