gpt4 book ai didi

c# - WPF 数据绑定(bind)验证被忽略

转载 作者:太空狗 更新时间:2023-10-29 22:34:52 25 4
gpt4 key购买 nike

我(相信)我正在以教科书的方式连接数据绑定(bind)验证,但它根本不起作用。

在调试器中,永远不会调用 Validate(object value, 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 添加到单向绑定(bind)。单向绑定(bind)永远不会将值推送到源,因此无需验证任何内容,也永远不会调用您的 ValidationRule。如果您想验证用户输入的数据,请在您的绑定(bind)上设置 Mode="TwoWay"。您也可以完全省略 Mode 属性,因为 TextBox.Text 默认绑定(bind)双向。

如果您确实需要单向绑定(bind)并且希望在将值从源(标量)推送到目标(TextBox.Text)时进行验证,请设置 ValidatesOnTargetUpdated在 ValidationRule 上为 True。您可以在 XAML 中或在 ValidationRule 类的构造函数中执行此操作。

关于c# - WPF 数据绑定(bind)验证被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3294099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com