I am developing an application in WPF using MVVM, but I am stuck with the ICommand objects.
I have a windows which contains some buttons, so, I bind them to their respective ICommand in XAML as below:
<Button Command="{Binding DoSomethingCommand}" Content="Do Something" />
Then, In my view-model class I have written the following:
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;
}
....
}
So, Since I need that my button is not enabled the first time the window opens, I set my variable isDoSomethingButtonEnabled
to false
. And it works, the button is disabled at the beginning, but my problem is that when I change the variable isDoSomethingButtonEnabled
to true
at run time my button is still disabled.
I have even done some tests after changing the variable isDoSomethingButtonEnabled
to true
, printing the result of DoSomethingCommand.CanExecute()
and it shows "true"!
so, what Should I do in order to enable my button??
Thank you in advance
There is an event called CanExecuteChanged on the ICommand
interface which:
Occurs when changes occur that affect whether or not the command should execute.
With the Prism DelegateCommand you can raise this event with the RaiseCanExecuteChanged
method:
public void SomeMethod()
{
//do some work
isDoSomethingButtonEnabled = true;
DoSomethingCommand.RaiseCanExecuteChanged();
}