Мой стандартный способ сделать это - показать свойство ViewState из модели представления (обычно enum). Затем представление связывается со свойством и использует visualstatemanager для переключения в соответствующие визуальные состояния в зависимости от перечисления.
DataStateSwitchBehavior из примеров выражений является хорошим примером того, как выполнить переход в визуальные состояния.
РЕДАКТИРОВАТЬ В ответ на комментарий
Во-первых, при работе с VisualStates используйте Blend (никто не должен заставлять писать столько XAML вручную). Я полагаю, что это даже на всех (большинство?) Подписок MSDN.
Использование визуальных состояний начинается с Диспетчер визуальных состояний
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="GroupOne">
<VisualState x:Name="Normal"/>
<VisualState x:Name="Searching"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
Обычно вы добавляете это в layoutroot.
Диспетчер визуальных состояний состоит из коллекции StateGroups, которая, в свою очередь, состоит из коллекции VisualStates.
Группы поддерживают взаимоисключающие состояния организованно, поскольку вы можете иметь несколько активных визуальных состояний одновременно, но только одно состояние из каждой группы. Стандартный шаблон должен иметь пустое состояние, называемое чем-то вроде «Нормальное» или «По умолчанию», которое используется для отключения других состояний. Базовое состояние в основном.
В вашем случае у вас будет визуальное состояние "Поиск", которое будет содержать раскадровку, которая отключит различные кнопки, активирует анимацию занятости и т. Д.