Ну, это зависит от конкретных деталей, а не от всех, которые вы нам сообщили, но я могу привести несколько примеров.
Предположим, что ваши DataTemplate
для пользовательских элементов находятся в XAML пользовательского элемента управления ResultsView
. Это хорошее место, но вы могли бы поместить его в словарь ресурсов.
Как вы говорите, ListBox
привязан к коллекции пользовательских предметов. Далее предположим, что коллекция пользовательских элементов сама по себе является свойством в MainPageViewModel
. И вы ясно сказали, что команда, с которой вы хотите связать, также находится в MainPageViewModel
.
Таким образом, проблема, которая является очень распространенной, заключается в том, что вы работаете внутри шаблона, связанного с привязкой к коллекции, и поэтому ваш DataContext
является пользовательским элементом. Это уже не основной вид-модель. Это замечательно, поскольку вы показываете соответствующие свойства пользовательского элемента, такие как CaseID
. Но не очень хорошо, когда вы хотите сбежать на верхний уровень модели представления.
Если то, что я сказал, является правдой, то пользовательский элемент управления ResultsView
фактически, вероятно, связан с MainPageViewModel
, потому что вы еще не "сверлили" в коллекцию пользовательских элементов. Итак, вам нужно найти способ, используя синтаксис привязки для ссылки на пользовательский элемент управления ResultsView
из DataTemplate
для ListBox
. Если вы можете сделать это, то вы сбежали из коллекции.
Для этого есть два основных подхода:
ElementName
синтаксис
RelativeSource
синтаксис
Я опишу ElementName
синтаксис, а вы можете посмотреть другой.
Часть 1) Назовите свой ResultsView
UserControl
элемент следующим образом:
<UserControl ....
Name="resultsView">
<!-- ... -->
Часть 2) Внутри DataTemplate
, где вы определяете внешний вид гиперссылки, используйте синтаксис ElementName
для ссылки на этот элемент:
<TextBlock>
<Hyperlink Command="{Binding DataContext.ItemDetailsCommand, ElementName=resultsView}"/>
</TextBlock>
Итак, сначала мы используем ElementName
, чтобы получить элемент ResultsView
UserControl
, а затем у нас есть путь из двух частей: первая часть - это свойство DataContext
ResultsView
, которое дает нам MainPageViewModel
(да!), А затем свойство команды, которую мы хотим вызвать.
Это один из способов «избежать» команд привязки и выдачи, найденных на более высоком уровне в модели представления.