Xaml 如何将DataTemplate中的ContextMenu绑定到父ListBox的DataContext
我在DataTemplate中有一个ContextMenu(来自Silverlight工具包),用作列表框的ItemTemplate: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 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元素名,尝试在没有数据上下文的情况下查看哪个部分工作不正常。