I used this some time ago and the Visible-When Core _expression_ is working fine so far.
@Tom
Why was it wrong to add it to the application model? The use cases for visible-when exist. Is it just the implementation you think that is wrong?
IMHO the visible-when concept in E4 is really not easy to understand. And you still need the plugin.xml to get it working with the application model. It feels a bit too complicated the way it is now.
@Nicolas
You could set a value for the active perspective to the IEclipseContext as described in the tutorial I posted above. And then let your _expression_ evaluate your custom value. In that case you would need to implement a listener that reacts on perspective change so you are able to change the value for your _expression_ in the context.
I didn't found a special perspective change event, but as a starting point you could try to listen for UIEvents.Perspective.TOPIC_ALL and evaluate the current active perspective.
To be honest, I didn't try this myself, but from my understanding this would be the first thing to try.