Существует несколько способов доступа вне контекста DataContexts.
1) Связывание ElementName
Это, вероятно, наименее полезно, так как в большинстве сценариев реального мира то, что вы пытаетесь связать, в любом случае выходит за рамки имен. Но это способ доступа к параллельному или родительскому контексту данных, если элемент Framework находится в области имен.
<TextBox Text="{Binding ElementName=ControlSomewhereElseBoundToSomeOtherControlPresenter, Path=DataContext.SomeTextPropertyOnTheControlPresenter}" />
2) Связывание с относительным источником
Это похоже на # 1, но с использованием RelativeSource для перехода к соответствующему визуальному элементу и захвата DataContext. Конечно, это предполагает, что DataContext, который вы пытаетесь получить, находится выше того места, где вы в данный момент находитесь в дереве визуалов.
3) Использовать статическое реле
Вы можете представить свои альтернативные ControlPresenters в статическом классе, который действует как фасад для вашей ViewModel. Затем в каждом ViewModel создайте свойства экземпляра, которые проходят через статические методы / свойства. Это распространенный способ достижения общего хранилища в нескольких моделях просмотра. Я понимаю, что этот метод потребует от вас немного изменить шаблон, но добавление простой оболочки ViewModel вокруг этих классов «ControlPresenter» кажется намного более простым, чем описанные вами параметры.