WhenAction is triggered when USER changes the widget (I mean, if the change is a result of user-initiated input event). Changing value by client code does not trigger WhenAction.
(Of course, it also depends on how widget is actually implemented, but all widgets should follow this rule).