从其他命令通知CanExecuteChanged的命令

时间:2016-05-04 09:29:05

标签: c#

我有以下ViewModel:

public ICommand AddNewFilm { get; set; }
    public ICommand AddNewFilmWindow { get; set; }
    public ICommand CancelNewFilm { get; set; }
    public ICommand ShowFilm { get; set; }
    public ICommand FilterFilm { get; set; }
    public ICommand OrderFilm { get; set; }
    public ICommand SearchFilm { get; set; }

    public Repository<SpravaFilmuDbContext, FilmModel> FilmService { get; set; }

    public FilmViewModel()
    {
        InitData();
        InitCommands();
    }

    private void InitData()
    {
        this.Name = "Films";
        this.Service = new FilmService();
        base.LoadData();
        this.NewItem = null;
        this.ShowItem = null;
    }

    private void InitCommands()
    {
        this.AddNewFilm = new AddNewFilmCommand(this);
        this.AddNewFilmWindow = new AddNewFilmWindowCommand(this);
        this.CancelNewFilm = new CancelNewFilmCommand(this);
        this.ShowFilm = new ShowFilmCommand(this);
        this.FilterFilm = new FilterFilmCommand(this);
        this.OrderFilm = new OrderFilmCommand(this);
        this.SearchFilm = new SearchFilmCommand(this);
    }

在AddNewFilmWindow中,我有这样的CanExecute:

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

当用户使用CancelNewFilm命令时,NewItem将设置为null。

现在问题:我想在使用CancelNewFilm之后通知AddNewFilmWindow它可以再次执行。我不能把它放到CancelNewFilmCommand中因为我没有引用AddNewFilmWindow,对吧?不知道如何解决这个问题。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

由于您已将ViewModel传递给ICommand,因此您可以清除NewItem中的CancelNewFilmCommand媒体资源。

通过引用NewItem属性在CanExecute覆盖AddNewFilmWindow内应为空。