I am having a problem with a setting the enabled state of a button on a Dialog. The button in question is defined as:
This is a well-known limitation of Windows Installer. The state of the dialog doesn't change until you refresh it in any other way, for instance, moving back and forward, as you correctly mentioned.
The workaround here is to have two identical dialogs, DialogA and DialogB. The PerformValidation button on DialogA will perform validation as it does right now and call DialogB (as NewDialog). The same way, the PerformValidation button on DialogB will also perform validation and call DialogA. Thus, you'll have the dialogs to be loaded each time you run validation and button state will be correctly displayed. The user won't suspect anything, because he/she will only see the same dialog. :-)
The idea is described better in detail here. It is called "twin dialogs".
Hope this helps.