I often do this sort of thing with a trick. I use a button to change a dummy variable, called
update for example. I put a dummy expression,
update, in the body of the Manipulate, which will make the body be updated whenever the variable
update changes value. Finally, I put only the variables whose changes should cause an update in the list of
TrackedSymbols, which should include
update, or else clicking the button will have no effect.
Manipulate[
update;
{a, b},
{a, 0, 1}, {b, 0, 1},
Button["update", update = 1 - update],
{{update, 0}, ControlType -> None},
TrackedSymbols :> {update}
]