Мы пытаемся использовать ICommand для настройки кнопки в Silverlight с Prism. Мы бы хотели, чтобы кнопка была отключена в некоторых случаях. DelegateCommand принимает 2 параметра: «ExecuteMethod» и «CanExecuteMethod»
Когда мы устанавливаем ICommand, мы ожидаем, что если используется «CanExecuteMethod», то он будет вызван, чтобы увидеть, можно ли вызвать «ExecuteMethod». Состояние «Включено» кнопки должно отражать результат «CanExecuteMethod»
Что мы на самом деле видим:
Когда форма создана, метод вызывается и кнопка включается или отключается. (в этом случае включено)
CanExecuteMethod больше никогда не вызывается, и метод Execute сработает, даже если мы попытались установить поведение, чтобы этого не происходило. Исключение брошено (что мы хотели бы избежать).
Очевидный ответ: мы должны называть что-то вроде:
OnPropertyChanged("SaveCommand");
но мы как-то ошибаемся. Либо мы предполагаем, что это работает так, как нет, либо мы пропускаем шаг. Есть идеи?
Код:
SaveCommand = new DelegateCommand<string>(OnSaveCommand, CanSave);
public void OnSaveCommand( string helpNumber )
{
OnPropertyChanged("SaveCommand");
//DoSaveStuff
}
public bool CanSave(Object sender)
{
return Model.CanSave();// true or false depending
}