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

时间:2011-04-28 20:07:21

标签: xaml windows-phone-7 silverlight-3.0

我在DataTemplate中有一个ContextMenu(来自Silverlight Toolkit),用作ListBox的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绑定到由外部 DataContext(即适用于ListBox的那个)公开的视图模型上的属性?如果我是对的,我不能像解释here那样使用WPF相对声明。

如果我的子视图模型不需要引用“父”视图模型,我更愿意。

2 个答案:

答案 0 :(得分:1)

使用可以使用ElementName绑定。我这里没有代码,但您可以执行类似

的操作
DataContext="{Binding ElementName=LayoutRoot,Path=DataContext}"

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

答案 1 :(得分:1)

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