WPF Validation Not Firing on First LostFocus of the TextBox

focus, validation, wpf

Solution

If you're not adverse to putting a bit of logic in your code behind, you can handle the actual LostFocus event with something like this:

.xaml

<TextBox LostFocus="TextBox_LostFocus" ....

.xaml.cs

private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
     ((Control)sender).GetBindingExpression(TextBox.TextProperty).UpdateSource();
}

Problem

I am trying to validate the WPF form against an object. The validation fires when I type something in the textbox lose focus come back to the textbox and then erase whatever I have written. But if I just load the WPF application and tab off the textbox without writing and erasing anything from the textbox, then it is not fired. Here is the Customer.cs class: ``` public class Customer : IDataErrorInfo { public string FirstName { get; set; } public string LastName { get; set; } public string Error { get { throw new NotImplementedException(); } } public string this[string columnName] { get { string result = null; if (columnName.Equals("FirstName")) { if (String.IsNullOrEmpty(FirstName)) { result = "FirstName cannot be null or empty"; } } else if (columnName.Equals("LastName")) { if (String.IsNullOrEmpty(LastName)) { result = "LastName cannot be null or empty"; } } return result; } } } ``` And here is the WPF code: ``` <TextBlock Grid.Row="1" Margin="10" Grid.Column="0">LastName</TextBlock> <TextBox Style="{StaticResource textBoxStyle}" Name="txtLastName" Margin="10" VerticalAlignment="Top" Grid.Row="1" Grid.Column="1"> <Binding Source="{StaticResource CustomerKey}" Path="LastName" ValidatesOnExceptions="True" ValidatesOnDataErrors="True" UpdateSourceTrigger="LostFocus"/> </TextBox> ```

Original source