如何使用CanExecute方法启用Button

时间:2012-06-06 20:37:47

标签: c# wpf button prism icommand

我正在使用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()的结果并显示&#34; true&#34;!

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

提前谢谢

1 个答案:

答案 0 :(得分:14)

ICommand界面上有一个名为CanExecuteChanged的事件:

  

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

使用Prism DelegateCommand,您可以使用RaiseCanExecuteChanged方法提升此事件:

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