Xaml 上下文菜单命令不工作

Xaml 上下文菜单命令不工作,xaml,windows-phone-8,mvvm,command,contextmenu,Xaml,Windows Phone 8,Mvvm,Command,Contextmenu,我正在使用Windows Phone 8应用程序,我在使用列表框的上下文菜单时遇到一些问题。我使用ListBoxItemTemplate中的工具箱ContextMenu,如下所示: <DataTemplate x:Key="ListBoxItemTemplate"> <Grid Height="50" Background="#11414141" Margin="0,1,0,1"> <toolkit:C

我正在使用Windows Phone 8应用程序,我在使用
列表框的
上下文菜单时遇到一些问题。我使用
ListBoxItemTemplate
中的工具箱
ContextMenu
,如下所示:

<DataTemplate x:Key="ListBoxItemTemplate">
        <Grid Height="50" Background="#11414141"
            Margin="0,1,0,1">
            <toolkit:ContextMenuService.ContextMenu>
                <toolkit:ContextMenu>
                    <toolkit:MenuItem Header="Remove Transaction" Command="{Binding DataContext.RemoveTappedElementCommand}" CommandParameter="{Binding}"/>
                </toolkit:ContextMenu>
            </toolkit:ContextMenuService.ContextMenu>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="10"/>
                <ColumnDefinition Width="100"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="180"/>
            </Grid.ColumnDefinitions>
            <!--<StackPanel Grid.Column="0" Background="{Binding IsIncome, Converter={StaticResource TypeToColorConverter}}"/>-->
            <StackPanel Grid.Column="0" Background="#FFFB7C26"/>
            <TextBlock Grid.Column="1"
                Text="{Binding Date, StringFormat=dd/MM}"
                VerticalAlignment="Center"
                Margin="6,0,6,0"/>
            <TextBlock Grid.Column="2"
                Text="{Binding Capitolo}" 
                TextTrimming="WordEllipsis" 
                VerticalAlignment="Center"/>
            <Grid Grid.Column="3">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="15"/>
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding Amount, StringFormat=C}"
                    Grid.Column="0"
                    Foreground="{Binding IsIncome, Converter={StaticResource TypeToColorConverter}}"
                    VerticalAlignment="Center"
                    HorizontalAlignment="Right"
                    FontSize="25"
                    FontWeight="SemiBold"
                    Margin="4,0,4,0"/>
                <TextBlock Text="{Binding IsIncome, Converter={StaticResource TypeToSignStringConverter}}"
                    Grid.Column="1"
                    Foreground="{Binding IsIncome, Converter={StaticResource TypeToColorConverter}}"
                    VerticalAlignment="Center"                               
                    HorizontalAlignment="Center"
                    FontSize="25"
                    FontWeight="SemiBold"/>
            </Grid>
        </Grid>
    </DataTemplate>


我使用的是MVVM模式,所以我尝试将
MenuItem
的命令属性绑定到ViewModel的
ICommand
。但是当我点击上下文菜单的
菜单项时,什么都没有发生,命令没有被触发,我也不知道原因。非常感谢您的帮助。

您的绑定有一个问题:

Command="{Binding DataContext.RemoveTappedElementCommand}"
Command="{Binding ElementName=Root, Path=DataContext.RemoveTappedElementCommand}"
这将不会在顶级DataContext上查找
RemoveTappedElementCommand
,而是在项目视图模型上查找属性
DataContext
。 要真正绑定到包含ListBox的页面/控件的DataContext,请为该项指定一个名称

x:Name="Root"
并扩展您的绑定:

Command="{Binding DataContext.RemoveTappedElementCommand}"
Command="{Binding ElementName=Root, Path=DataContext.RemoveTappedElementCommand}"

是的,你说得对!谢谢我以为DataContext是从父控件继承的!因此,在项目模板中,DataContext会自动设置为集合的当前项目。实际上,当您考虑它时,您使用的绑定形式是
{binding itemPropertyName}
,因此DataContext就是项。。。谢谢!