Hi guys!
The missed binding updating after coercing a DP value was resolved only partially in my previous post. In fact the issue is still present when the binded DP type is a String!
Below my sample application screenshot downloadable here.

You are may asking “why it is necessary forcing binding UpdateTarget() both in CoerceValue and PropertyChanged callbacks”?

UpdateTarget() in PropertyChanged: in this way we ensure that the displayed text is updated every time MyValue DP has been changed. However, what happens when the current value is “100” and the user insert “1000”? The CoerceValue sets MyValue DP to 100 but, since the old value (100) is equal to new value (100), the PropertyChanged is not called! Consequently, the TextBox still displays the last typed value (1000)!

UpdateTarget() in CoerceValue: in this way we cover the scenario in which the current value is “100” and the user insert a value greater than 100 (e.g. 1000).

Honestly, I didn’t understood the reason why in case of “int” DP property a single call of UpdateTarget() on CoerceValue is sufficient to update the displayed value.

The problem is that MyValue Dependency Property is properly updated when inserting a value less than 0 or greater than 100, but the TextBlock still display the just typed value!
Honestly I didn’t understood the real cause of the problem and every WPF developers should expect TwoWay binding to display coerced value! Instead, even with a binding, the text block is still presenting what is typed into it ignoring the update!

As developer, you need to force a target update on the binding (via UpdateTarget()) when the coersion fails if you want to display the coerced value. Here you are the problem fixing: