Алекс,
Прежде всего, я перестал бы думать об этом с ViewModel.ViewModel полностью посвящен представлению и тесно связан с самим представлением.То, о чем вы говорите, - это Data (набор критериев, используемых в приложении).Таким образом, вопрос, скорее всего, заключается не в передаче ViewModels, а в передаче данных и сохранении / совместном использовании состояния (по выбранным критериям).
Вы можете иметь некоторый DTO-класс SearchCriteriaData и использовать его в различных ViewModels в вашем приложении, где бы вы ни находилисьэто необходимо.Сам SearchViewModel может иметь единственный параметр SearchCriteriaData.Контролер никогда не должен заботиться о поддержании согласованности состояния, это просто не его ответственность.Он может просто обновить его (используя некоторые сервисные вызовы, например, SearchService) и забыть и никогда не думать о том, кто будет его использовать.
Тогда контроллер, которому нужны такие критерии поиска, а не просто полагается на данныепараметры строки запроса, но также извлекает эти критерии из SearchService (который дает нам фактическую SearchCriteriaData) и добавляет его к своему определенному ViewModel.При этом вы никогда не сможете беспокоиться о состоянии на уровне контроллера и контролировать его где-то еще (что SearchService может даже сохранить эти критерии в базе данных, если это необходимо).
Итак, пусть ваши контроллеры будут оставаться без состояния, как это должно быть, и контролироватьсостояние либо с параметрами строки запроса, либо с помощью SearchService (который извлекает критерии поиска, определенные текущим пользователем, из любого места).