я бы из VM прокидывал стейт, а на UI ручками бы обновлял до нужных значений. Если изменилась структура - новые свичи добавились или старые удалились - просто их заново насоздавать. Если это происходит редко, не будет проблем с производительностью. Есть ощущение, что это не та задача, вокруг которой надо городить сложные diff-ы)