0

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

4

1 回答 1

1

每个实例ICommand都有一个布尔CanExecute元素。答案是将您的逻辑放入这些元素中。我使用一种类型,RelayCommand因为我使用 MVVM,但这与这个问题无关......重要的是指定是否Command可以执行的 bool 参数。我会做这样的事情:

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

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

于 2013-08-14T15:47:56.680 回答