WPF:绑定到Command的ContextMenu项仅在从其他源调用命令后启用。这是为什么?

时间:2010-03-12 22:07:01

标签: wpf command contextmenu

我有一个ContextMenu,其项目都绑定到命令,并在从另一个源调用ANY Command之后正确启用/禁用,但在此之前,它们都被禁用。因此,如果我运行应用程序,则禁用所有MenuItem,但如果我从另一个源(例如按钮)调用任何绑定命令,它们将与CanExecute代码同步。我不知道如何调试这个。任何想法都会有所帮助!?!

2 个答案:

答案 0 :(得分:4)

似乎是窗口主要焦点范围内没有聚焦元素的错误。 解决方法是将MenuItem的CommandTarget绑定到主窗口。

Marco Zhou的回答: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/7bd75a7c-eab4-4f3a-967b-94a9534a7455

<Window.ContextMenu>
    <ContextMenu >
      <ContextMenu.Items>
        <MenuItem Command="ApplicationCommands.Open" 
                  CommandTarget="{Binding Path=PlacementTarget,RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}"/> 
      </ContextMenu.Items>
    </ContextMenu>
  </Window.ContextMenu>

答案 1 :(得分:0)

有时您需要强制WPF重新评估命令是否已启用。

在代码中的某处,添加一个对:

的调用
CommandManager.InvalidateRequerySuggested();

看看是否有帮助。