执行command2后,通知命令1的CanExecute

时间:2016-05-03 21:37:22

标签: c# visual-studio

我有command1打开允许用户添加项目的窗口。执行command1后,我将更改CanExecute,以便GUI中的按钮变为灰色。

之后,用户可以添加/关闭(command2)项目。用户添加/关闭后,我想" un-grey"按钮,以便用户可以添加另一个项目。

问题是我不知道如何通知command1然后他可以再次执行自己。我试过CommandManager.InvalidateRequerySuggested();在command2的执行功能但不会从command1调用CanExecute。

有没有办法去" un-grey"按钮,以便它可以再次使用?

如果有任何不清楚的地方,请询问,我会提供更多信息。

以下是command1的代码:

    public class AddNewFilmWindowCommand : CommandBase<ViewModelCollection<FilmModel>>
{
    public override event EventHandler CanExecuteChanged;

    public AddNewFilmWindowCommand(ViewModelCollection<FilmModel> viewModelCollection)
        : base(viewModelCollection)
    {
    }

    public override bool CanExecute(object parameter)
    {
        if (this.ViewModel.NewItem == null)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    public override void Execute(object item)
    {
        this.ViewModel.NewItem = new FilmModel();

        var onCanExecuteChanged = this.CanExecuteChanged;
        if (onCanExecuteChanged != null)
        {
            onCanExecuteChanged(this, new EventArgs());
        }
    }
}

command2几乎相同,但执行当然是不同的。

谢谢。

1 个答案:

答案 0 :(得分:0)

向AddNewFilmWindowCommand添加方法:

internal void RaiseCanExecuteChanged() { CanExecuteChanged?.Invoke(...); }

在适当的时间从Command2调用新方法。