我在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相对声明。
如果我的子视图模型不需要引用“父”视图模型,我更愿意。
答案 0 :(得分:1)
使用可以使用ElementName绑定。我这里没有代码,但您可以执行类似
的操作DataContext="{Binding ElementName=LayoutRoot,Path=DataContext}"
其中LayoutRoot是ListBox之外的元素,或ListBox本身。
答案 1 :(得分:1)
为了记录,我习惯于在每个子视图模型上都有一个ICommand属性,在创建每个子视图模型时设置为父ICommand,再次使用CommandParameter="{Binding}"
。