我正在使用MVVM方法,並且我有一個來自我的ViewModel的對象DatabasesSubFrame
,它是DataTemplate
d顯示一個ListBox
。我想在ListBox
下面顯示一個Button
,該Button
與當前SelectedItem
和DatabasesSubFrame
對象上的一個屬性相結合,該屬性爲DataTemplate
d。WPF:在同一個控件中訪問兩個DataContexts
我知道如何引用當前選定的項目,方法是將DataContext
設置爲與ListBox
共享的祖先,並使用{Binding /}
。在這個例子中,共享祖先是StackPanel
。如果DataContext
未明確設置,則可以通過執行{Binding SomeProperty}
輕鬆地綁定到DatabasesSubFrame
對象上的屬性。但是,如果我在明確設置DataContext
內執行{Binding SomeProperty}
,則它指的是錯誤的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>
它看起來像我可以修改我的數據項持有父視圖模型對象的引用,但似乎有點哈克。 – evilfred 2009-11-30 06:51:01