Xaml 如何将DataTemplate中的ContextMenu绑定到父ListBox的DataContext

Xaml 如何将DataTemplate中的ContextMenu绑定到父ListBox的DataContext,xaml,windows-phone-7,silverlight-3.0,Xaml,Windows Phone 7,Silverlight 3.0,我在DataTemplate中有一个ContextMenu(来自Silverlight工具包),用作列表框的ItemTemplate: <DataTemplate x:Key="BillItemDataTemplate"> <Grid Margin="0,0,0,12" x:Name="ItemGrid"> <kit:ContextMenuService.ContextMenu> <kit:ContextMenu>

我在DataTemplate中有一个ContextMenu(来自Silverlight工具包),用作列表框的ItemTemplate:

<DataTemplate x:Key="BillItemDataTemplate">
  <Grid Margin="0,0,0,12" x:Name="ItemGrid">
    <kit:ContextMenuService.ContextMenu>
      <kit:ContextMenu>
        <kit:MenuItem Header="delete item" 
                      Command="{Binding ???????.DeleteItemCommand}"
                      CommandParameter="{Binding}" />
      </kit:ContextMenu>
    </kit:ContextMenuService.ContextMenu>
    [...]
  </Grid>
</DataTemplate>

[...]
如何告诉ContextMenu.Command绑定到外部数据上下文(即应用于列表框的属性)公开的视图模型上的属性?如果我是对的,我不能像前面解释的那样使用WPF相对声明


我希望我的子视图模型不需要引用“父”视图模型。

Use可以使用ElementName绑定。我这里没有代码,但你可以这样做

DataContext="{Binding ElementName=LayoutRoot,Path=DataContext}"

其中LayoutRoot是ListBox之外的一个元素,或者ListBox本身。

作为记录,我习惯于在每个子视图模型上都有一个ICommand属性,在创建每个模型时设置为父ICommand,同样使用
CommandParameter=“{Binding}”

我不想更改菜单项的DataContext,因为我将它用于CommandParameter。我尝试了Command=“{Binding DataContext.DeleteItemCommand,ElementName=LayoutRoot}”,但仍然不起作用。SL3和WP7之间有区别吗?我不知道为什么它不起作用。老实说,我用上面的问题解决了上下文菜单的这个问题。我要做的是从简单开始,尝试ListBox元素名,尝试在没有数据上下文的情况下查看哪个部分工作不正常。