为了对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);
}
我做错了什么?
答案 0 :(得分:0)
我可能有错误的结尾(我不在我的机器附近),但通常Caliburn.Micro
中的约定是指定Can<MethodName>
形式的保护属性,而不是比方法。
所以你可能想要添加一个属性。
public bool CanOnMenuItemClick
{
// Your code to determine if `OnMenuItemClick` can be executed.
}
我从示例中并不完全确定您使用命令做了什么,因此这可能不会成为您问题的完整解决方案。
您可能还需要在方法中添加对NotifyOfPropertyChange(() => CanOnMenuItemClick);
的调用,以便在您期望此方法的执行状态发生变化时向用户提醒。