Я пишу интерфейс конфигурации MVVM и пытаюсь реализовать функцию развернуть / свернуть все, которая применяется ко всем представлениям.
ViewModel верхнего уровня - это однородная коллекция других ViewModel, которая связана с ItemsControl в представлении. Каждый из этих дочерних ViewModels имеет несколько зависимых ViewModels, каждый из которых связан с ContentControl в представлении. Визуально это принимает форму набора расширителей (скажем, 3 из них), каждый из которых имеет 4-6 расширителей, скрытых внутри.
Я пробовал нисходящие методы поиска. Поскольку расширители верхнего уровня свернуты, их дочерние расширители даже не существуют, пока они не будут показаны в первый раз (Caliburn.Micro делает для них местоположение просмотра, когда их впервые запрашивают), и "раскрывают все" действие только расширяет первый уровень.
Логическое дерево тоже не поможет. Свойство ItemsControl верхнего уровня Items
на самом деле содержит объекты моего типа ViewModel, поэтому я не могу заглянуть в них для расширения.
Я думал об управлении этим на уровне ViewModel, но добавление свойства IsExpanded
ко всем виртуальным машинам и установка его с помощью какого-либо глобального менеджера кажется грязной. У ВМ нет другой причины узнать, какие расширители расширены.
Какой лучший способ справиться с этим? Есть ли какой-нибудь трюк с привязкой привязанного свойства, который я мог бы использовать?