The fact that the default UpdateSourceTrigger value for TextBoxes is LostFocus, is a problem when the Window has a default button (button whose command is automatically executed when the user hits the Enter key, as opposed to using the mouse), because the Textbox does not lose focus is that case, and if the user was typing data into a TextBox just before hitting the Enter key, then the ViewModel will not have the data entered by the user in that TextBox when executing the command associated with the button. Note: This problem only applies to the MVVM approach, as it affects the ViewModel. In the Code-Behind approach, all user entered data will be available, irrespective of how the on-click event of the button is triggered (by mouse or by keyboard).
One way to avoid this is to simply change the UpdateSourceTrigger value of the TextBox to PropertyChanged. Doing so will force the ViewModel property for the TextBox to be updated as the user types into the TextBox. This will solve problem of the missing ViewModel data when the user hits the Enter button, but can have a performance impact on the application because of the constant source refreshing activity that will take place as the user types in the TextBoxes.
Is there a better approach of capturing the value of a TextBox in the ViewModel from a View that has a Default button?