除非您键入,否则不会触发验证

时间:2015-05-04 07:05:43

标签: wpf validation

我在WPF窗口中有三个文本框,其中包含UpdateSourceTrigger =“LostFocus”。 我还有一个验证类(:ValidationRule),根据我的条件返回false或true,并保持它如此简单:条件是检查字符串是否为空。

<TextBox x:Name="TestBox">
    <TextBox.Text>
        <Binding ElementName="This" Path="test" 
         UpdateSourceTrigger="LostFocus">
            <Binding.ValidationRules>
                <local:IPv4ValidationRule />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>
<TextBlock Margin="2" Foreground="Red" FontWeight="Bold" 
       Text="{Binding ElementName=TestBox, 
                      Path=(Validation.Errors),
                      Converter={StaticResource eToMConverter}}" />

问题是: 如果您运行该应用程序,并且您通过文本框,则丢失的焦点不会显示错误。我在代码中放了一个按钮来激活验证,并且没有显示错误。

只有在文本框中输入然后清除它时,验证才有效。

我该如何解决这个问题?因为在这种情况下,我无法确认是否有人将文本框留空,除非他输入然后删除。

1 个答案:

答案 0 :(得分:0)

阅读MSDN,您可以找到:

  

当目标的值转移到时,通常会发生验证   绑定源属性。

因此,除非您更新源,否则不会在未键入密钥的情况下评估验证规则。 你可以在后面的代码中完成它。假设MainWindow是您的窗口,您需要添加一个Loaded事件处理程序:

public MainWindow()
{
    InitializeComponent();
    Loaded += new RoutedEventHandler(MainWindow_Loaded);
}

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    BindingExpression bindingExpression = TestBox.GetBindingExpression(TextBox.TextProperty);
    bindingExpression.UpdateSource();
}

如您所见,处理程序的代码更新了源代码,因此评估了ValidationRule