DataGrid ContextMenu MenuItems有时会被禁用

时间:2018-01-08 10:44:39

标签: c# wpf data-binding datagrid contextmenu

我有一个DataGrid,我不知道,为什么MenuItems ContextMenusometimes enabledsometimes disabled

<DataGrid ItemsSource="{Binding Values}">
    <DataGrid.ContextMenu>
        <ContextMenu>
            <MenuItem Command="Copy" />
            <MenuItem Command="Paste" />
            <MenuItem Command="Delete" />
        </ContextMenu>
    </DataGrid.ContextMenu>
</DataGrid>

原因可能是什么?我没有找到任何代码,负责设置ICommand.CanExecuteMenuItem.IsEnabled

请告诉我我还需要提供哪些信息。

@Maverik:我没有为这三个标准.NET命令编写任何代码:

1 个答案:

答案 0 :(得分:1)

您的MenuItem是内置的WPF命令。根据MSDN文档,它的实现取决于控制触发命令的位置,在您的情况下取决于DataGrid的状态(行选择与否等)。

  

...实现逻辑绑定到带有的命令   的CommandBinding。例如,如果在a上执行Close命令   控制,执行关闭命令的逻辑可能不是   由控件提供,因此应用程序编写者将负责   用于编写确定控件如何处理的逻辑   命令。

     

许多控件确实为许多命令提供了实现逻辑   在命令库中。例如,TextBox类提供逻辑   用于粘贴,剪切,复制,撤消和重做命令。

请参阅ApplicationCommands Class

您可以通过输入XAML来影响您的ContextMenu:

<DataGrid.CommandBindings>
    <CommandBinding Command="Copy" CanExecute="CommandBinding_CanExecute"/>
</DataGrid.CommandBindings>

并在代码背后:

private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
    e.CanExecute = false;//put here your logic
    e.Handled = true;
}