CommandManager.InvalidateRequerySuggested does not cause a requery on CanExecute in MVVM-Light
Just to add another possible solution, in my case I needed to call CommandManager.InvalidateRequerySuggested
on the UI thread using Application.Current.Dispatcher.Invoke
.
There are a lot suggestions out there (here, here, here).
I use a simple but not so beautiful workaround. I simply call OnPropertyChanged("MyICommand")
for my commands in my BackgroundWorker
Completed Event.
According to Josh Smith's article 'Allowing CommandManager to query your ICommand objects'. The problem is that the command is a non-routed command.
I have made a new implementation of the MVVM-Light RelayCommand as follows:
// original
//public event EventHandler CanExecuteChanged;
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void RaiseCanExecuteChanged()
{
CommandManager.InvalidateRequerySuggested();
// var handler = CanExecuteChanged;
// if (handler != null)
// {
// handler(this, EventArgs.Empty);
// }
}