如何使用其 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"!
那么,我应该怎么做才能启用我的按钮?
提前谢谢你
ICommand
接口上有一个名为 CanExecuteChanged 的事件,它:
在发生影响命令是否的更改时发生 应该执行。
使用 Prism DelegateCommand,您可以使用 RaiseCanExecuteChanged
方法引发此事件:
public void SomeMethod()
{
//do some work
isDoSomethingButtonEnabled = true;
DoSomethingCommand.RaiseCanExecuteChanged();
}