如何使用其 CanExecute 方法启用按钮

本文关键字:启用 按钮 方法 CanExecute 何使用 | 更新日期: 2023-09-27 18:36:22

我正在使用MVVM在WPF中开发一个应用程序,但我坚持使用ICommand对象。

有一个包含一些按钮的窗口,因此,我将它们绑定到 XAML 中各自的 ICommand,如下所示:

<Button Command="{Binding DoSomethingCommand}" Content="Do Something" />

然后,在我的视图模型类中,我编写了以下内容:

public class MyViewModel : ObservableObject
{
    private bool isDoSomethingButtonEnabled = false;
    ....        
    public ICommand DoSomethingCommand
    {
        get;
        private set;
    }
    ....
    ....
    public MyViewModel()
    {
        DoSomethingCommand = new DelegateCommand<String>(this.OnDoSomething, this.CanDoSomething);
    }
    private void OnDoSomething(String arg)
    {
    }
    private bool CanDoSomething(String arg)
    {
        return isDoSomethingButtonEnabled;
    }
    ....
}

因此,由于我需要在窗口第一次打开时不启用我的按钮,因此我将变量isDoSomethingButtonEnabled设置为 false 。它可以工作,按钮在开始时被禁用,但我的问题是,当我在运行时将变量isDoSomethingButtonEnabled更改为true时,我的按钮仍然被禁用。

我什至在将变量isDoSomethingButtonEnabled更改为 true 后做了一些测试,打印了DoSomethingCommand.CanExecute()的结果,它显示"true"!

那么,我应该怎么做才能启用我的按钮?

提前谢谢你

如何使用其 CanExecute 方法启用按钮

ICommand接口上有一个名为 CanExecuteChanged 的事件,它:

在发生影响命令是否的更改时发生 应该执行。

使用 Prism DelegateCommand,您可以使用 RaiseCanExecuteChanged 方法引发此事件:

public void SomeMethod()
{
    //do some work
    isDoSomethingButtonEnabled = true;
    DoSomethingCommand.RaiseCanExecuteChanged();
}