I am failing to explain the issue, please consider this image:
![Image]()
The key thing is to understand how the idea of "Dirty" and "Valid" is handled during an edit-in-progress
with a TextBox with UpdateSourceTrigger = LostFocus (the default)
The behavior on the left is expected, but WPF apps tend to the behavior on the right (due to a design flaw in the Binding / BindingGroup classes)
WPF apps only correctly activate the buttons AFTER LostFocus
but that is confusing for users who expect things to work normally

The key thing is to understand how the idea of "Dirty" and "Valid" is handled during an edit-in-progress
with a TextBox with UpdateSourceTrigger = LostFocus (the default)
The behavior on the left is expected, but WPF apps tend to the behavior on the right (due to a design flaw in the Binding / BindingGroup classes)
WPF apps only correctly activate the buttons AFTER LostFocus
but that is confusing for users who expect things to work normally