我在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}}" />
问题是: 如果您运行该应用程序,并且您通过文本框,则丢失的焦点不会显示错误。我在代码中放了一个按钮来激活验证,并且没有显示错误。
只有在文本框中输入然后清除它时,验证才有效。
我该如何解决这个问题?因为在这种情况下,我无法确认是否有人将文本框留空,除非他输入然后删除。
答案 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
。