Ответ 1
Поскольку вы отметили свой вопрос с помощью WPF
, я могу рассказать вам, как это сделать в WPF, вы можете проверить, можно ли его повторно использовать в приложениях телефона Windows 8.
Сначала, вы можете дать x:Name
корневой элемент, к которому привязан ViewModel. Скажите это окно, установите x: Name на нем и привяжите с помощью ElementName
.
<Window x:Name="myWindow">
...
<DataTemplate x:Key="template">
<StackPanel>
<TextBlock Text="{Binding Name}"/> <!-- From list item -->
<TextBlock Text="{Binding DataContext.MyViewModel.Country,
ElementName=myWindow }"/> <!-- From view model -->
</StackPanel>
</DataTemplate>
</Window>
Второй, вы можете попробовать использовать RelativeSource
для перемещения визуального дерева и получения корневого элемента DataContext.
<DataTemplate x:Key="template">
<StackPanel>
<TextBlock Text="{Binding Name}"/> <!-- From list item -->
<TextBlock Text="{Binding DataContext.MyViewModel.Country,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=Window} }"/>
<!-- From view model -->
</StackPanel>
</DataTemplate>
Далее, если ListBox наследует DataContext из корневого элемента (т.е. вы явно не устанавливаете DataContext в ListBox). Вы можете использовать оба подхода в ListBox, а также вместо Window.
Примечание. Как упоминалось здесь, FindAncestor
не определен для телефона Windows 8, но имя элемента работает. Итак, попробуйте использовать первый подход, и он должен работать для вас.