Совместное использование свойства в представлении (не ViewModel) между различными элементами UserControls
У меня есть вид, который отображает что-то похожее на географическую карту, и у меня есть некоторые UserControls
внутри этого представления каждый из них отображает связанную информацию о DataContext, но каждый, так сказать, с другой точки зрения.
Затем моя цель - навести указатель мыши на один элемент UserControl, выделив функцию в КАЖДОМ элементе UserControl, в то время как, конечно, визуальный стиль этого выделения будет индивидуальным для каждого элемента UserControl.
Например, если у меня есть "Путь" на карте и его профиль высот на графике, я бы хотел навести курсор мыши на профиль высот, динамически отображая вертикальную линию над этим графиком, в то время как в то же время некоторые маркеры были бы динамически отображается на карте, и наоборот.
Я могу сделать это с помощью некоторого числового значения в самом представлении, которое будет иметь двустороннюю привязку к данным в каждом из пользовательских элементов управления, но есть некоторые концептуальные проблемы:
- Классическая привязка данных нажимает на свойство в ViewModel, но функция "выделение мыши" специфична для View (она не представляет состояние объекта), и я определенно не хотел бы добавлять такое свойство в ViewModel, которое бы загрязняло его с конкретным кодом вида;
- Когда создаются UserControls, их DataContext является ViewModel или некоторыми из его свойств. Необходимость изменить DataContext части UserControl на другой объект не представляется целесообразным или простым способом сделать это;
- Я мог бы немного взломать и создать
Slider
в представлении со свернутой видимостью, и используйте ElementBinding с каждым UserControl, но все же тогда, как мне сделать ElementBinding между представлением и отдельным UserControl?
Итак, главный вопрос:
Как я могу привязать одно свойство в представлении (не в ViewModel!) Ко многим элементам управления UserControl, содержащимся в данном представлении?
Если бы все было единым монолитным представлением, использование ElementBinding было бы для меня очевидным выбором, но с разными классами (одним представлением и несколькими пользовательскими элементами управления) я не знаю, как сделать ElementBinding, или даже если это правильный способ сделать что я хочу.
1 ответ
Я мог бы пропустить ваш вопрос, но почему бы вам просто не добавить свойство зависимости в свой вид и связать его с содержащимися элементами управления пользователя?
<YourView x:Name="yourView">
<YourUserControl SomePropertyOfYourUserControl="{Binding ElementName=yourView, Path="YourView's DependencyProperty"/>
<YourSecondUserControl SomePropertyOfYourSecondUserControl="{Binding ElementName=yourView, Path="YourView's DependencyProperty"/>
</YourView>
-
Изменить, чтобы завершить мой ответ:
Вы сказали:
Классическая привязка данных дает свойство в ViewModel
... но это необязательно, так как вы также можете привязать свойства зависимостей в представлении (в его коде).