This means that there can be times when the source data is temporarily out of sync with the target (the control).

It defaults to the value "Default", which basically means that the source is updated based on the property that you bind to.

As of writing, all properties except for the Text property, is updated as soon as the property changes (Property Changed), while the Text property is updated when focus on the destination element is lost (Lost Focus).

If you have an alternative solution to this problem, I'd love to hear about it.

The default is Default, which returns the default Update Source Trigger value of the target dependency property.

However, the default value for most dependency properties is Property Changed, while the Bindings that are Two Way or One Way To Source listen for changes in the target property and propagate them back to the source. Usually, these updates happen whenever the target property changes.

This is fine for check boxes and other simple controls, but it is usually not appropriate for text fields.

It's also worth noting that this generic solution can be incorrect in certain binding scenarios.

For example, an application might be using Bindings with the Update Source Trigger set to Explicit and use some special criteria to decide when to commit the binding changes.

Updating after every keystroke can diminish performance and it denies the user the usual opportunity to backspace and fix typing errors before committing to the new value.

I found myself having an issue with Explicit a few years back.

A typical situation is as follows: Typically a Tool Bar or a Menu has its own logical focus scope, and therefore interacting with them does not remove logical focus from the Text Box.