Причина этого заключается в том, что система привязки в WPF является «интеллектуальной», и при изменении значения в TextBox предполагается, что событие PropertyChanged сработает для этого свойства, и игнорирует его.
Вы можете заставить TextBox обновить свои привязки, вызвав:
textBox.GetBindingExpression(TextBox.TextProperty).UpdateTarget();
но сложность заключается в том, чтобы найти хорошее место для этого. Очевидно, ваш объект данных не может этого сделать, поскольку он не имеет ссылки на экземпляр TextBox. Вы могли бы сделать это в окне, которое содержит TextBox, связав его с обработчиком события PropertyChanged объекта данных, но это не кажется очень чистым.
Я отредактирую этот ответ, если подумаю о лучшем решении, но по крайней мере это объясняет причину , что привязка не работает.
Aha! Изменение привязки к IsAsync = true:
<TextBox x:Name="textBox" Text="{Binding Path=TestData, IsAsync=true}"/>
По-видимому, изменяет поведение так, что обращает внимание на событие PropertyChanged, когда оно вызывается установщиком.
В качестве дополнения (32 месяца спустя) это поведение было изменено на в .NET 4 , и вам больше не понадобится IsAsync.