可以在通用事件处理程序中正确绑定OnMenuItemClick

时间:2014-07-08 07:26:43

标签: wpf caliburn.micro

为了对topmenuitems实现进行抽象,我已经制定了一个通用的方法来处理通过IoC的操作。

<MenuItem Header="_Open" cal:Message.Attach="[Event Click] = [Action OnMenuItemClick('OpenFileCommand')]" />

这适用于OnMenuItemClick事件,并且初始调用CanOnMenuItemClick可以正常工作。 此后,在调用CanOnMenuItemClick时,CanOnMenuItemClick不会更新。看起来UIElement没有绑定到CanOnMenuItemClick方法。

public void OnMenuItemClick(string cmd)
{            
}

public bool CanOnMenuItemClick(string cmd)    
{            
    ICommand command = _commands.SingleOrDefault(x => x.GetType().Name == cmd);
    return command != null && command.CanExecute(null);
}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我可能有错误的结尾(我不在我的机器附近),但通常Caliburn.Micro中的约定是指定Can<MethodName>形式的保护属性,而不是比方法。

所以你可能想要添加一个属性。

public bool CanOnMenuItemClick
{
    // Your code to determine if `OnMenuItemClick` can be executed.
}

我从示例中并不完全确定您使用命令做了什么,因此这可能不会成为您问题的完整解决方案。

您可能还需要在方法中添加对NotifyOfPropertyChange(() => CanOnMenuItemClick);的调用,以便在您期望此方法的执行状态发生变化时向用户提醒。