执行另一个命令后启用/禁用命令

时间:2013-08-14 14:48:48

标签: wpf command

这是一个技巧问题。在调用另一个命令后,我有许多应该启用/禁用的命令。比方说,我有打开,保存和启动命令。只有在成功执行Open命令后才能启用“保存”和“启动”命令。调用Start命令后,必须禁用Open和Save命令。对于这种情况,最好的做法是什么?

1 个答案:

答案 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;
}

显然,您需要在某个阶段再次将hasStartedisOpen变量设置为false,以重新启用该功能。