如何根据条件隐藏wpf xaml中上下文菜单的菜单项

如何根据条件隐藏wpf xaml中上下文菜单的菜单项,wpf,xaml,visual-studio-2012,mvvm,Wpf,Xaml,Visual Studio 2012,Mvvm,在我的xaml中,我使用wpf ContextMenu在wpf datagid中显示菜单项。我需要根据条件隐藏菜单项。我尝试了以下方法,但不起作用 <ContextMenu x:Key="contextMenuTextCell"> <MenuItem Name="copyDealContextMenu" Header="Copy Deal" Command="{Bindi

在我的xaml中,我使用wpf ContextMenu在wpf datagid中显示菜单项。我需要根据条件隐藏菜单项。我尝试了以下方法,但不起作用

<ContextMenu x:Key="contextMenuTextCell">


            <MenuItem Name="copyDealContextMenu"
                    Header="Copy Deal"
                    Command="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.CopyDeal}"
                    CommandParameter="{Binding}">

                <Style TargetType="{x:Type MenuItem}">
                    <Setter Property="Visibility" Value="Collapsed"></Setter>
                    <Style.Triggers>
                        <DataTrigger Binding="{ Binding ElementName= BlotGrid,Path=DataContext.ProductType }" Value="FXO">
                            <Setter Property="Visibility" Value="Visible"></Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>

            </MenuItem>

        </ContextMenu>

如何在上下文菜单中隐藏菜单项


谢谢

这不起作用有两个原因

1) ContextMenu与它设置的元素(即它的PlacementTarget)不在同一个VisualTree中。因此,您将无法绑定到具有ElementName的元素

2) 你把你的风格当作菜单的内容。(一开始我也没注意到…)。它需要设置为菜单项的DependencyProperty“Style”

<Grid x:Name="BlotGrid" Background="Red">
     <Grid.ContextMenu>
        <ContextMenu>            
            <MenuItem Name="copyDealContextMenu"
                Header="Copy Deal"        
                CommandParameter="{Binding}">
                 <MenuItem.Style>
                    <Style TargetType="{x:Type MenuItem}">
                        <Setter Property="Visibility" Value="Collapsed"></Setter>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu},Path=PlacementTarget.DataContext.IsXXX}" Value="True">
                                <Setter Property="Visibility" Value="Visible"></Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </MenuItem.Style>
            </MenuItem>
        </ContextMenu>
    </Grid.ContextMenu>      
</Grid>


我猜您的命令绑定也不起作用..命令绑定工作正常。刚刚添加了一个样式来控制可见性。嗨,Eran,ContextMenu是网格的一部分。右键单击该行,ContextMenu将显示在datagrid上。尝试了上面的代码,能够按预期在Xaml中查看PlacementTarget.DataContext.ProductType,但由于无法查看菜单项,因此未触发style datatrigger检查您的代码我使用IsXXX属性执行了此操作。一个真实的价值。你把它改成符合你需要的代码了吗。顺便提一下在发布答案之前我已经测试过了。所以保持开放的心态,检查一下自己。我所说的理由是有效的。上面的代码对我很有用。谢谢Eran的指导。你应该把它添加到你的问题中。