如何从事件中调用CanExecute来禁用命令?

时间:2017-08-31 15:57:08

标签: wpf command

我有一个带有CanExecute方法的命令“ShowDataCommand”。

public override bool CanExecute(object parameter)
{
    return _someFacade.CanCommandEnable();
}

当我启动我的应用程序时,CanExecute被调用,并且取决于从Facade返回的值,它也是 启用或禁用该命令。

现在新要求是,主页面中有一个按钮。当用户单击该按钮时,会打开一个对话框 在时间对话框打开之前,应禁用“ShowDataCommand”。

当对话框打开且对话框关闭时,已经触发了一个事件。我已在命令中订阅了该事件。 事件以适当的真假值触发。

现在我不知道如何从此事件中禁用命令?我可以用这个新值以某种方式提升CanExecute吗?

1 个答案:

答案 0 :(得分:1)

您可以通过提升CanExecute事件来强制再次调用命令的CanExecuteChanged方法。

大多数ICommand实现都有一个引发此事件的方法,因此如果您使用自己的实现,可以在类中添加一个方法,并在需要“刷新”命令时调用它,例如当您单击按钮:

public class YourCommandClass : ICommand
{
    ...
    public void RaiseCanExecuteChanged() //<-- call this method
    {
        var handler = CanExecuteChanged;
        if (handler != null)
            handler(this, EventArgs.Empty);
    }
}

有关RelayCommand实施的示例,请参阅MvvmLight中的ICommand课程:https://github.com/paulcbetts/mvvmlight/blob/dce4e748c538ed4e5f5a0ebbfee0f54856f52dc6/GalaSoft.MvvmLight/GalaSoft.MvvmLight%20(NET35)/Command/RelayCommand.cs