This is very complicated approach for such simple task.
This is quite common situation. I usually solve that by adding Sync method that gets invoked on WhenAction of any widget that affects other widget. Usually, it is OK to setup every aspect there - it is not required to have special Sync for particular widget, just place all enable/disable logic into the single place (Sync) and get it invoked when user alters the widget (WhenAction).