Я использую подход MVVM, и у меня есть объект из моей ViewModel с именем DatabasesSubFrame
, который равен DataTemplate
d, чтобы показать ListBox
. Я хочу отобразить Button
ниже ListBox
, который привязывается как к текущему SelectedItem
, так и к свойству DatabasesSubFrame
объекта, который DataTemplate
d.
Я знаю, как обратиться к выбранному в данный момент элементу, установив DataContext
для общего предка с помощью ListBox
и использовать {Binding /}
. В этом примере общим предком является StackPanel
. И если бы DataContext
не был явно указан там, я мог бы легко привязать свойство к объекту DatabasesSubFrame
, просто выполнив {Binding SomeProperty}
. Однако, если я сделаю {Binding SomeProperty}
в явно установленном DataContext
, это будет означать неправильный DataContext
.
Как мне получить доступ к «оригиналу» DataContext
здесь? Я пытался связываться с RelativeSources и TemplatedParents, но не мог понять, как их вписать.
<DataTemplate DataType="{x:Type VM:DatabasesSubFrame}">
<StackPanel DataContext="{Binding Databases}" >
<ListBox Name="DbInfoBox"
ItemsSource="{Binding}"
IsSynchronizedWithCurrentItem="True">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding ShortName}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<!-- Problem: The Command and V:CreateCommandBinding.Command are set incorrectly here. How do I access OpenDbCommand from the top-level DataTemplate's DataContext? -->
<Button Content="Open Database"
CommandParameter="{Binding /}"
Command="{Binding ???, Path=OpenDbCommand.Command}"
V:CreateCommandBinding.Command="{Binding ???, Path=DataContext.OpenDbCommand}"/>
</StackPanel>
</DataTemplate>