我有一个DataGrid
,我不知道,为什么MenuItems
ContextMenu
为sometimes enabled和sometimes disabled。
<DataGrid ItemsSource="{Binding Values}">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Command="Copy" />
<MenuItem Command="Paste" />
<MenuItem Command="Delete" />
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
原因可能是什么?我没有找到任何代码,负责设置ICommand.CanExecute
或MenuItem.IsEnabled
。
请告诉我我还需要提供哪些信息。
@Maverik:我没有为这三个标准.NET命令编写任何代码:
答案 0 :(得分:1)
您的MenuItem是内置的WPF命令。根据MSDN文档,它的实现取决于控制触发命令的位置,在您的情况下取决于DataGrid的状态(行选择与否等)。
...实现逻辑绑定到带有的命令 的CommandBinding。例如,如果在a上执行Close命令 控制,执行关闭命令的逻辑可能不是 由控件提供,因此应用程序编写者将负责 用于编写确定控件如何处理的逻辑 命令。
许多控件确实为许多命令提供了实现逻辑 在命令库中。例如,TextBox类提供逻辑 用于粘贴,剪切,复制,撤消和重做命令。
您可以通过输入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;
}