I have a notebook that has a very large number of sliders within a manipulate and I want to have Mathematica hold off on recalculating the values of the various compuations till after I have made all the adjustments. The reason for this is it takes 1.5 min for the calculation to run and I sometimes have to make 5+ changes to the sliders so it would be nice to be able to make all the adjustments I want to make and then envoke the re-evaluation of the notebook.
Solution that came to my mind is TrackedSymbols. They can control what is and what is not updated.
Manipulate[
Dynamic[{a, b}, TrackedSymbols -> s],
{a, 0, 1, Appearance -> "Labeled"},
{b, 0, 1, Appearance -> "Labeled"},
{{s, {}}, {All -> "ON", {} -> "OFF"}}]

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}
]
Michael, I like this approach. I think it is cleaner than mine because we do not introduce an extra Dynamic inside Manipulate in addition to its default one. Thanks for sharing!
Thanks, Vitaliy! Each of ours has a different functionality so they are both good in their own ways. Here’s a variation on yours that uses Refresh instead of Dynamic (and takes advantage of the default Dynamic applied by Manipulate):
Manipulate[
Refresh[{a, b}, Sequence @@ s],
{a, 0, 1, Appearance -> "Labeled"},
{b, 0, 1, Appearance -> "Labeled"},
{{s, {None}}, {{} -> "ON", {None} -> "OFF"}}]
This very neat, Michael, excellent usage of syntax and functionality.
Works great! Thanks to you both for your help.
Tim
If you wanted to do this for just a single Manipulate, I think it’s simplest just to set ContinuousAction → None, as mentioned in the Manipulate docs.
Manipulate[{a,b}, {a,0,1}, {b,0,1}, ContinuousAction -> None]

One reason you might want to do this explicitly via an approach like Michael’s is that you can adjust the controls of several different Manipulates, and then have a single update button to trigger all of them, rather than having to trigger them one at a time.
Manipulate[update; a, {a,0,1}, TrackedSymbols :> {update}]
Manipulate[update; b, {b,0,1}, TrackedSymbols :> {update}]
update = 0; Button["update", update = 1 - update]