这是一个技巧问题。在调用另一个命令后,我有许多应该启用/禁用的命令。比方说,我有打开,保存和启动命令。只有在成功执行Open命令后才能启用“保存”和“启动”命令。调用Start命令后,必须禁用Open和Save命令。对于这种情况,最好的做法是什么?
答案 0 :(得分:1)
ICommand
的每个实例都有一个bool CanExecute
元素。答案是将您的逻辑放入这些元素中。我使用RelayCommand
类型,因为我使用MVVM,但这与此问题无关......重要的是bool参数指定Command
是否可以执行。我会做这样的事情:
private bool isOpen, hasStarted;
public ICommand Open
{
get { return new ActionCommand(action => OpenCommand(), canExecute =>
!hasStarted); }
}
private void OpenCommand()
{
// do your stuff here
isOpen = true;
}
public ICommand Save
{
get { return new ActionCommand(action => SaveCommand(), canExecute =>
isOpen && !hasStarted); }
}
private void SaveCommand()
{
// do your stuff here
}
public ICommand Start
{
get { return new ActionCommand(action => AudioTrack.RevertState(), canExecute =>
isOpen); }
}
private void StartCommand()
{
// do your stuff here
hasStarted = true;
}
显然,您需要在某个阶段再次将hasStarted
和isOpen
变量设置为false,以重新启用该功能。